본문 바로가기
Spring/JPA

상속관계 매핑

by o3oppp 2023. 12. 20.

상속관계 매핑

  • 관계형 데이터베이스는 상속관계 X
  • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사
  • 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑

주요 어노테이션

  • @Inheritance(strategy = InheritanceType.xxx)
  • @DiscriminatorColumn(name = "DTYPE")
  • @DiscriminatorValue("xxx")

조인 전략

@Inheritance(strategy = InheritanceType.JOINED)
  • 부모 테이블, 자식 테이블로 나눈 뒤 SELECT 시 조인 사용(각각 테이블로 변환)
  • @Inheritance(strategy = InheritanceType.JOINED) 사용
  • 장점
    1. 테이블 정규화
    2. 외래키 참조 무결성 제약조건 활용가능
    3. 저장공간 효율화
  • 단점
    1. 조회 시 조인을 많이 사용하므로 성능 저하
    2. 조회 쿼리가 복잡
    3. 데이터 저장 시 INSERT 쿼리 2번 호출
  • @DiscriminatorValue
    • 자식 클래스에서 사용
    • DTYPE이 기본 엔티티 명
    • 선언한 대로 DTYPE에 들어감

단일 테이블 전략

@Inheritance(strategy = InheritanceType.Single_TABLE)
  • 하나의 테이블에 모든 필드를 다 넣음(통합 테이블로 변환)
  • @Inheritance(strategy = InheritanceType.Single_TABLE) 사용
  • DTYPE이 필수로 생성됨
  • 장점
    1. 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
    2. 조회 쿼리가 단순
  • 단점
    1. 자식 엔티티가 매핑한 컬럼은 모두 null 허용
    2. 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있음(상황에 따라 느림)

구현 클래스마다 테이블 전략

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  • 서브타입 테이블로 변환
  • @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 사용
  • 장점
    1. 서브 타입을 명확하게 구분해서 처리할 때 효과적
    2. not null 제약조건 사용 가능
  • 단점
    1. 여러 자식 테이블을 조회할 때 성능이 느림(UNION 사용)
    2. 자식 테이블을 통합해서 쿼리 작성이 어려움

'Spring > JPA' 카테고리의 다른 글

프록시(Proxy)  (0) 2023.12.20
MappedSuperclass  (0) 2023.12.20
연관관계 매핑  (1) 2023.12.19
엔티티 매핑  (0) 2023.08.25
영속성 관리  (0) 2023.08.22