id, name 같은 정보들은 많은 객체에서 중복되어 사용된다.
이러한 공통 매핑 정보가 존재할 때 유용하게 사용할 수 있는 어노테이션이 @MappedSuperclass이다.
@MappedSuperclass
@MappedSuperclass는 상속관계 매핑, 엔티티, 테이블과 전혀 관계없이 부모클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다.
직접 생성해서 사용할 일이 없으므로 추상클래스로 생성하는 것이 권장되고, 조회나 검색이 불가하다.
사용 방법
생성자, 생성시간, 수정자, 수정시간을 다수의 엔티티가 공통으로 가지는 상황에서 BaseEntity를 @MappedSuperclass를 사용하여 추상클래스로 생성한다.
@Getter
@Setter
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
}
상속받고자 하는 엔티티에 상속해 주면 데이터베이스에 컬럼으로 생성되게 된다.
@Entity
public class Member extends BaseEntity {
...
}
@Entity
public class Team extends BaseEntity {
...
}
정리
- 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
- 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용
- @Entity 클래스는 엔티티나 @MappedSuperclass로 지 정한 클래스만 상속 가능
'JPA' 카테고리의 다른 글
[JPA] @ElementCollection, @CollectionTable을 통한 값 타입 컬렉션 사용법 (2) | 2023.04.22 |
---|---|
[JPA] 프록시와 지연로딩 (2) | 2023.03.05 |
[JPA] 상속관계 매핑 (0) | 2023.03.03 |
[JPA] 연관관계 매핑 (0) | 2023.02.28 |
[JPA] 기본 키 매핑 방법 (0) | 2023.02.27 |