인프런 김영한 님의 강의를 보면서 학습 하였습니다.
상속관계 매핑
- 관계형 데이터베이스는 상속관계가 없다.
- 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.
- 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑
슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
조인전략 > 각각 테이블로 변환 [거의 정석]
- 테이블 정규화
- 외래키 참조 무결성 제약조건 활용 가능
- 저장공간 효율화
- 조회 시 조인을 많이 사용하여 성능이 저하된다.
- 조회 쿼리가 복잡하다.
- 데이터 저장시 Insert 쿼리 2번 호출
단일 테이블 전략 > 통합 테이블로 변환
- 조인이 필요 없기때문에 조회 속도가 빠르다.
- 조회 쿼리가 단순하다.
- 자식 엔티티가 매핑한 컬럼은 모두 null허용
- 테이블 하나에 저장하기 때문에 상황에 따라 오히려 성능이 저하될 수 있다.
구현 클래스마다 테이블 전략 > 서브타입 테이블로 변환
- 서브타입 구분을 명확하게 해서 처리할 때 유용함
- not null 제약조건 사용가능
- 여러 자식이 테이블을 함께 조회해 성능이 느림
- 자식 테이블을 통합해서 쿼리하기 어려움
주요 어노테이션
- @Inheritance(strategy=InheritanceType.XXX)
1. JOINED : 조인전략
2. SINGLE_TABLE: 단일테이블 전략
3. TABLE_PER_CALSS : 구현 클래스마다 테이블 전략
- @DiscriminatorCoulmn(name="DTYPE")
- @DiscriminatorValue("XXX")
@MappedSuperclass
- 공통 매핑 정보가 필요할 때 사용한다.(id, name)