상속관계 매핑

gotcha!!·2023년 9월 14일
0

JPA

목록 보기
11/16

상속관계 매핑

  • 객체는 상속관계가 있는데 관계형 데이터베이스는 상속 관계가 없다.
  • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.

상속관계 매핑은 객체의 상속 구조와 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), 쿼리가 어렵다.

이건 사용하지마!

profile
ha lee :)

0개의 댓글