본문 바로가기
Spring/JPA/Hibernate

상속관계 매핑

by 개복이 2021. 5. 12.

주요 어노테이션

  • Inheritance(strategy = Inheritance.TYPE.XXX)
    • JOINED : 조인 전략
    • SINGLE_TABLE : 단일 테이블 전략
    • TABLE_PER_CLASS : 구현 클래스마다 테이블 전략
  • DiscriminatorColumn(name = "DTYPE")
    • JOINED는 선언해주는 것이 좋다. SINGLE_TABLE은 선언하지 않아도 자동 생성
  • DiscriminatorValue("XXX")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

조인 전략(기본적으로는 조인 전략을 가져간다)

  • 장점
    • 테이블 정규화
    • 외래 키 참조 무결성 제약조건 활용가능
    • 저장공간 효율화
  • 단점
    • 조회 시 조인을 많이 사용한다. 성능 저하
    • 조회 쿼리가 복잡하다.
    • 데이터 저장 시 INSERT SQL 2번 호출

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

단일 테이블 전략

  • 장점
    • 조인이 필요 없으므로 일반적으로 조회 성능이 빠르다.
    • 조회 쿼리가 단순하다.
  • 단점
    • 자식 엔티티가 매핑한 컬럼은 모두 NULL 허용
    • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다.
      상황에 따라서 조회 성능이 오히려 느려질 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

  • 이 전략은 데이터베이스 설계자와 ORM 전문가 둘 다 추천하지 않는다.
    (정산 시스템이라고 가정했을 시 ALBUM, MOVIE, BOOK 등을 모두 조회해봐야 한다. 묶이는 것 없다)
  • 장점
    • 서브 타입을 명확하게 구분해서 처리할 때 효과적
    • NOT NULL 제약조건 사용 가능
  • 단점
    • 여러 자식 테이블을 함께 조회할 때 성능이 느리다. (UNION SQL 필요)
    • 자식 테이블을 통합해서 쿼리하기 어렵다.

 

 

Reference

  • 자바 ORM 표준 JPA 프로그래밍

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

즉시 로딩과 지연 로딩  (0) 2021.05.14
프록시  (0) 2021.05.13
일대다 [1:N]  (0) 2021.05.11
다대일 [N:1]  (0) 2021.05.10
단방향 연관관계  (0) 2021.05.08

댓글