07. 고급 매핑
상속관계 매핑#
- RDB는 상속 관계 X
 - 그나마 비슷한게 슈퍼타입, 서브타입 모델링 기법이 객체 상속과 유사
 - 상속관계 매핑: 객체의 상속구조와 DB의 슈퍼/서브타입 관계 매핑
 
슈퍼/서브타입 논리모델을 물리모델로 구현하는 방법#
- 각각 테이블로 변환 -> 조인 전략
- ITEM 테이블이 있고, ALBUM/MOVIE 테이블의 각 pk가 ITEM_ID의를 fk 로 가짐
 - ITEM 테이블엔 DTYPE 필드가 있어 각 종류를 넣을 수 있음
 - 가장 정규화된 방식
 
 - 통합 테이블로 변환 -> 단일 테이블 젼략
- ITEM 테이블로 모든 타입을 해결
 - 대신 각 타입마다 쓰는 필드를 다 가져 sparse 해질 수 있음
 - 성능에는 이점이 있음
 
 - 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략
- ITEM 테이블은 없고, ALBUM/MOVIE 테이블 만 있음
 
 - 음 객체 입장에선 다 똑같음
 
주요 어노테이션#
@Inheritance(strategy = InheritanceType.JOINED): 조인 전략@Inheritance(strategy = InheritanceType.SINGLE_TALBE)@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)+ 슈퍼 타입은 abstract 클래스 조인 전략- Item 슈퍼타입으로 조회할 경우 하위 타입을 다 조회하는 쿼리가 나가게 됨 (비효율적)
 
@DiscriminatorColumn: DTYPE 필드 추가@DiscriminatorValue("M"): 서브 타입 클래스에서 DTYPE 이름 지정- 단일 테이블 전략에선 꼭 뜰어가야 함
 
장단점#
- 조인 전략 (정석)
- 장점
- 테이블 정규화됨
 - 외래키 참조 무결성 제약조건 활용 가능
 - 저장 공관 효율화
 
 - 단점
- 조인 쿼리가 나가게 됨
 - 조회 쿼리 복잡
 - insert 2번
 
 
 - 장점
 - 싱글 테이블 전략 - 확장할 경우가 많이 없을 경우
- 장점
- 조인이 필요없어 일반적으로 빠름
 - 조회 쿼리가 단순
 
 - 단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용 (sparase 하다)
 - 데이터가 너무커져서 특정상황에서 조회성능이 오히려 느릴 수 있음
 
 
 - 장점
 - 구현 클래스마다 테이블 전략 (추천 X)
- 장점
- not null 제약조건 사용 어려움
 
 - 단점
- 쿼리가 UNION 해야되서 매우 복잡함
 
 
 - 장점
 
@MappedSuperclass - 매핑 정보 상속#
- 객체입장에서 공통 매핑정보가 필요할 때 사용 (id, name, createdDate, updatedDate)
 - BaseEntity 클래스를 설계하고 해당 클래스에 
@MappedSuperclass를 달게 됨, 그리고 해당 클래스를 상속 - 상속관계 X, 엔티티 X, 테이블과 매핑 X