JPA(Java Persistence API)는 Java 클래스를 데이터베이스 테이블에 매핑하기 위한 여러 주석을 제공합니다. 유용한 주석 중 하나는 @MappedSuperclass입니다. 이는 속성이 다른 엔터티 클래스에 의해 상속되어야 하지만 엔터티 자체는 아닌 클래스를 지정하는 데 사용됩니다. Vehicle, Car, Motorcycle 등 클래스와 관련된 실제 사례를 통해 이 주석의 유용성을 살펴보겠습니다.
@MappedSuperclass가 무엇인가요?
@MappedSuperclass 주석은 클래스가 독립적인 엔터티가 되어서는 안 되지만 해당 속성이 엔터티인 다른 클래스에 의해 상속되어야 함을 나타내는 데 사용됩니다. 이는 기본 클래스에 대해 별도의 테이블을 생성하지 않고 여러 엔터티 간에 공통 속성을 공유하려는 경우에 유용합니다.
주요 기능:
실제예
차량이 슈퍼클래스인 Vehicle, Car, Motorcycle에 대한 클래스 계층 구조를 사용하는 예를 만들어 보겠습니다.
1. 기본 클래스: 차량
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class Veiculo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String marca; private String modelo; private int ano; // Getters e Setters }
2. 하위 클래스: 자동차
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3. 하위 클래스: 오토바이
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
테이블 매핑
위 클래스를 사용하여 JPA는 데이터베이스에 다음 테이블을 생성합니다.
Vehicle 클래스는 엔터티가 아니라 단지 슈퍼클래스이므로 Vehicle 테이블은 데이터베이스에 존재하지 않습니다.
사용 시 이점 @MappedSuperclass
고려사항
수퍼클래스도 엔터티가 되도록 하려면(예: 직접 쿼리의 경우) @MappedSuperclass 대신 @Inheritance 상속 전략을 사용하세요.
@MappedSuperclass는 기본 클래스가 개별 엔터티로 유지될 필요가 없지만 해당 속성이 여러 엔터티와 관련된 상황에 이상적입니다.
결론
@MappedSuperclass 주석은 JPA에서 재사용 가능한 클래스 계층 구조를 생성하기 위한 강력한 도구입니다. 위의 예에서 우리는 Vehicle의 공통 속성을 중앙 집중화하는 동시에 Car 및 Motorcycle 엔터티의 유연성과 독립성을 유지했습니다. 이 접근 방식은 특히 유사한 특성을 공유하는 여러 엔터티가 있는 시스템에서 더욱 깔끔하고 모듈화된 설계를 촉진합니다.
위 내용은 JPA의 @MappedSuperclass 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!