- 객체는 상속관계가 있는데 관계형 데이터베이스는 상속 관계가 없다.
- 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.
상속관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다.
- 각각 테이블로 변환 (조인전략)
- 통합 테이블로 변환 (단일 테이블 전략)
- 서브 타입 테이블로 변환 (구현 클래스마다 테이블 전략)
- @Inheritance(strategy=InheritanceType.XXX)
JOINED : 조인 전략
SINGLE_TABLE : 단일 테이블 전략
TABLE_PER_CLASS : 구현 클래스마다 테이블 전략- @DiscriminatorColumn(name="DTYPE")
- @DiscriminatorValue("XXX")
장점 : 정규화가 되어있고, 외래 키 참조 무결성 활용가능, 저장공간이 효율적
단점 : 많은 조인이 사용되어서 성능이 저하되고, 조회 쿼리가 복잡하고, 데이터 저장 시 인서트 쿼리가 2번 호출됨
@DiscriminatorColumn을 붙여줘야 DTYPE(디폴트 값)이 테이블에 생성 된다.
장점 : 조인이 필요 없으므로 성능이 좋고, 조회 쿼리가 단순하다.
단점 : 자식 엔티티가 매핑한 컬럼은 모두 null 허용해야함, 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있어서 조회 성능이 오히려 느려질 수 있다.
@DiscriminatorColumn을 붙여주지 않아도 DTYPE(디폴트 값)이 테이블에 생성 된다.
장점 : not null 제약 조건 사용 가능하고, 서브 타입을 명확하게 구분해서 처리할 때 효과적
단점 : 여러 자식 테이블을 조회할 때 성능이 저하되고(UNION SQL), 쿼리가 어렵다.
이건 사용하지마!