[JPA] Mapped Superclass - 매핑 정보 상속
프로그래밍 언어/JPA

[JPA] Mapped Superclass - 매핑 정보 상속

반응형

@MappedSuperclass

공통 매핑 정보가 필요할 때 사용한다.

 

공통 속성이 필요할 경우 하나의 객체로 관리할 수 있다.

예시로 모든 테이블에 등록자, 등록일, 수정자, 수정일이 필요한 경우

 

공통으로 사용할 클래스를 만들어서 @MappedSuperclass를 사용하고, 적용할 엔티티에서 상속받아 사용한다.

- 상속관계 매핑 X

- 엔티티 X, 테이블과 매핑 X

- 부모 클래스를 상속 받는 자식 클래스에만 매핑 정보를 제공

- 조회, 검색 불가(em.find(BaseEntity) 불가)

- 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장

 

테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.

주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용

 

@Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속이 가능하다.

 

 

엔티티

@MappedSuperclass
public abstract class BaseEntitiy {

    private String createdBy;
    private LocalDateTime createDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
}

@Entity
public class Member extends BaseEntitiy{
    @Id
    @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME")
    private String username;

    @ManyToOne
    @JoinColumn(insertable = false, updatable = false)
    private Team team;
}
Hibernate: 
    
    create table Member (
       MEMBER_ID bigint not null,
        createDate timestamp,
        createdBy varchar(255),
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        USERNAME varchar(255),
        team_TEAM_ID bigint,
        TEAM_ID bigint,
        primary key (MEMBER_ID)
    )

 

반응형