MappedSuperclass의 사용을 아래의 예시를 통해 알아보자
객체의 입장에서 id, name의 필드가 계속 나올 때 BaseEntity에 속성만 두고 상속해서 사용할 때 사용한다
DB는 각각 따로 사용한다.
이렇게 공통매핑 정보가 필요할 때 사용한다.
다른 예시를 보자
만약 Team과 Member 클래스의 공통 정보 필드가 아래와 같이 있다고 보자
private String createdBy;
private LocalDateTime createDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
공통 정보를 처리하기 위해 BaseEntity라는 클래스를 만들자
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
여기서 MapedSuperclass라는 에노테이션이 필요하다.
BaseEntity는 @Entity는 아니다.
Member, Team 클래스에 BaseEntity를 상속 시켜준다.
public class Team extends BaseEntity{
public class Member extends BaseEntity{
MappedSuperclass
- 상속관계 매핑이 아니다
- BeaseEntity는 엔티티가 아니며 테이블과 매핑되지 않는다.
- 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다.
- 조회, 검색이 불가능 하다. (em.find(BaseEntity)불가능)
- 직접 생성해서 사용할 일이 없으므로 추상클래스를 권장한다.
참고
Entity 클래스는 엔티티나 MappedSuperclass로 지정된 클래스만 상속이 가능하다.
'JPA' 카테고리의 다른 글
즉시 로딩과 지연 로딩 (0) | 2023.08.30 |
---|---|
프록시와 연관관계 관리 (0) | 2023.08.30 |
상속관계 매핑 (0) | 2023.08.29 |
다양한 연관관계 매핑 (0) | 2023.08.29 |
연관관계 매핑, 단방향, 양방향 (0) | 2023.08.28 |