728x90
- 부모 클래스는 테이블과 매핑하지 않고 부모클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass를 사용한다.
- 회원(member)과 판매자(seller)는 서로 관계가 없는 테이블과 엔티티이다.
- 테이블을 그대로 두고 객체 모델의 id, name 두 공통 속성을 부모 클래스로 모으로 객체 상속 관계로 만들어보자.
@MappedSuperclass
public abstract class BaseEntity {
@Id @GeneratedValue
private Long Id;
private String name;
...
}
@Entity
public class Member extends BaseEntity {
//ID 상속
//NAME 상속
private String email;
...
}
@Entity
public class Seller extends BaseEntity {
//ID 상속
//NAME 상속
private String shopName;
...
}
- 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
- @MappedSuperclass로 지정한 클래스는 엔티티가 아니므로 em.find()나 JPQL에서 사용할 수 없다.
- 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
- @MappedSuperclass를 사용하면 등록일자, 수정일자, 등록자, 수정자 같은 여러 엔티티에서 공통으로 사용하는 속성을 효과적으로 관리할 수 있다.
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
지연 로딩(Lazy Loading) - feat. 프록시 (0) | 2022.06.14 |
---|---|
임베디드 타입(@Embeddable, @Embedded) (0) | 2022.06.13 |
다대일 양방향 [N:1, 1:N] 관계 (0) | 2022.06.13 |
연관관계 편의 메소드 작성 시 주의사항(part.2) (0) | 2022.06.12 |
연관관계 편의 메소드(part.1) (0) | 2022.06.12 |