임베디드 타입
과MappedSuperclass
의 차이가 무엇이며, 각각 언제 사용해야 좋을까 의문이 들었다.
참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능
임베디드 타입의 장점
임베디드 타입과 테이블 매핑
그렇다면 MappedSuperclass와 임베디드 도대체 언제 사용해야 할까??
상속: MappedSuperclass
, 위임: 임베디드 타입
따라서 가급적 임베디드를 사용하는 것이 좋다.
다만, MappedSuperclass가 쓸만한 경우 딱 한가지
- 대부분의 엔티티들이 공통으로 사용하는 속성들을 다룰 때
- 등록일, 수정일, 등록한 사람, 수정한 사람과 같이 운영상의 이유를 포함하는 컬럼을 공통으로 사용할 때는 상속을 사용하는게 더욱 편리하다.
예를 들어, 임베디드 타입으로 만들면 다음과 같다
class TraceDate {
TYPE createdDate;
TYPE updatedDate;
}
이런 경우 JPQL 쿼리를 하려면 다음과 같이 항상 traceDate라는 식으로 임베디드 타입을 적어주어야 한다.
select m from Member m where m.traceDate.createdDate > ?
상속을 사용하면 다음과 같이 간단하다.
select m from Member m where m.createdDate > ?
💥결국 둘중 선택이지만, 편리함과 직관성 때문에, 상속(MappedSuperclass
)을 사용한다.
참고