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

실전 예제 4 - 상속관계 매핑#

Last updated on