반응형
@MappedSuperclass를 사용하면 부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공한다.
비유를 하자만 추상 클래스와 비슷한데 @Entity는 실제 테이블과 매핑되지만 @MappedSuperclass는 실제 테이블과 매핑되지 않는다. 단순히 매핑 정보를 상속할 목적으로만 사용된다.
이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
@MappedSuperclass
public abstract class BaseEntity {
@Id @GeneratedValue
@Column(name = "ID")
private long id;
@Column(name = "NAME")
private String name;
}
@Entity
public class Member extends BaseEntity {
@Column(name = "EMAIL")
private String email;
}
@Entity
public class Seller extends BaseEntity {
@Column(name = "SHOPNAME")
private String shopName;
}
위에 코드는 BaseEntity의 id, name 두 공통 속성을 부모클래스로 모으로 객체 상속 관계로 만들었다.
자식 엔티티에서 공통으로 사용되는 매핑 정보만 제공하면 된다.
부모 엔티티로부터 물려받은 매핑 정보를 재정의 하려면 @AttributeOverrides, @AttributeOverride를 사용하고,
연관 관계를 재 정의하려면 @AssociationOverrides, @AssociationOverride를 사용한다.
@Entity
@AttributeOverrides({
@AttributeOverride(name = "ID", column = @Column(name = "MEMBER_ID")),
@AttributeOverride(name = "NAME", column = @Column(name = "MEMBER_NAME"))
})
public class Member extends BaseEntity {
@Column(name = "EMAIL")
private String email;
}
간단히 정리하자면 @MappedSuperclass는 테이블과 관련이 없고 단순히 공통으로 사용하는 매핑 정보만 제공한다.
ORM에서 이야기하는 진정한 상속 매핑은 객체 상속을 데이터베이스의 슈퍼타입 서브타입 관계와 매핑하는 것이다.
반응형
'JPA' 카테고리의 다른 글
조인 테이블 매핑 (0) | 2022.01.05 |
---|---|
복합 키와 식별, 비식별 관계 매핑 (0) | 2022.01.04 |
엔티티 상속 관계 매핑 (0) | 2021.12.31 |
연관관계 설정 시 주의사항 (0) | 2021.12.30 |
엔티티 연관 관계 매핑 어노테이션 정리 (0) | 2021.12.30 |