본문 바로가기
JPA with 김영한

상속관계의 매핑

by wonseok99 2021. 9. 8.

RDB 의 상속관계

관계형 DB는 상속관계 개념이 없으며 대신 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.

 

RDB 의 상속관계를 물리 모델로 구현하는 방법

@Inheritance(strategy=InheritanceType.XXX)

  1. 각각 테이블로 변환  ->  조인 전략  [JOINED]
    슈퍼타입의 속성을 서브타입들이 상속받고 각자의 속성을 가지고 있는다.

    # 장점
    -  테이블 정규화
    -  외래키 참조 무결성 제약조건 활용가능 : 슈퍼타입의 PK를 통해서 모두 조회 가능하다.
    -  저장 공간이 효율적이다 // 정규화 덕분

    # 단점
    - 조회시 많은 조인을 사용하여 쿼리가 복잡


  2. 통합 테이블로 변환  ->  단일 테이블 전략 [SINGLE_TABLE]

    # 장점
    - 통합 테이블을 사용해서 조인이 필요없고 조회 쿼리가 단순해지며 성능이 빨라진다.

    # 단점
    - 자식 엔티티가 매핑한 컬럼중 연관이 없는 컬럼들에 대한 NULL을 모두 허용해야 한다.
    - 테이블이 커질수 있다.


  3. 서브타입 테이블로 변환  ->  구현 클래스마다 테이블 전략 [TABLE_PER_CLASS]
    상위 클래스를 제거하고 하위 클래스들에 속성을 부여하는 전략


@DiscriminatorColumn(name=“DTYPE”)
상속을 받는 서브타입의 객체들을 구분하기 위한 어노태이션

 

번외 ]
@MappedSuperclass
단순히 모든 엔티티들이 공통으로 사용하는 속성들을 모아서 뿌려주는 역활을 한다.
이렇게 생성한 객체를 필요한 객체들이 상속받게 되면 persist 시에 알아서 SQL 문으로 컬럼들을
생성해준다.

상속관계의 엔티티는 @Entity 혹은 @MappedSuperclass 만 가능하다.

 

 

 

'JPA with 김영한' 카테고리의 다른 글

즉시로딩 과 지연로딩  (0) 2021.09.10
프록시(Proxy)  (0) 2021.09.09
다양한 연관관계 매핑  (0) 2021.09.05
연관관계 매핑  (0) 2021.09.04
엔티티 매핑  (0) 2021.08.31