Dev/JPA
RS) MappedSuperclass 매핑 정보 상속(상속관계X)
Okdol-Min
2022. 2. 22. 22:40
@MappedSuperclass
- 공통 매핑 정보가 필요할 때 사용
- 상속관계 매핑이 아니다.
- 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공
- 직접 생성해서 사용할 일이 없기 때문에 추상클래스로 사용하길 권함
- 테이블이랑은 관계없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
- ex) 등록일, 수정일, 등록자, 수정자 같은 전체에 공통으로 적용되어야 할 정보들..
- @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능
JPA에서는 Extends를 쓰려면 @Entity라는 어노테이션이 있거나 @MappedSuperclass가 있어야 한다.
- @Entity를 적었을 경우는 상속관계를 하기 위해서 쓴다.
- @MappedSuperclass는 공통적인 속성만 상속 받기 위해 사용
코드를 통해 살펴보자!
@Entity // 상속관계 매핑일 때 쓰이는 것
// 매핑 정보만 받는 부모클래스(superclass) - 속성만 상속 받는 것
@MappedSuperclass
public class BaseEntity {
@Column(name = "INSERT_MEMBER")
private String createdBy;
private LocalDateTime createDateTime;
@Column(name = "UPDATE_MEMBER")
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
- DBA의 요청으로 모든 엔티티에서 수정자, 등록자, 수정일, 등록일을 추가하라고 함.
- 개발자는 이를 위해 컬럼을 추가하기로 함.
- 모든 만들어진 엔티티에 각각 다 넣어줘야하는데 이게 너무너무 번거로운 작업이다.
- BaseEntity를 등장 시켜서 공통으로 사용해야할 컬럼들을 적어준다.
- 상속을 통해 필요한 엔티티들에서 공통적으로 BaseEntity를 상속받는다. (extends BaseEntity)
- 공통으로 사용하는 BaseEntity 는 @MappedSuperclass를 적어준다.
- 끝..