티스토리 뷰

JPA

JPA - 상속 관계 매핑

절취선 2022. 6. 24. 20:53
반응형

상속 관계 매핑

관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다.

대신에 슈퍼타입 서타타입 관계라는 모델링 기업이 객체의 상속 개념과 가장 유사하다.

슈-서 논리 모델 테이블 구현

슈퍼타입-서브타입 논리 모델을 실제 모델인 테이블로 구현할 때는 3가지 방법이 있다.

  • 각각의 테이블로 변환 (조인 테이블 전략)

    • 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다.
  • 통합 테이블로 변환 (단일 테이블 전략)

    • 테이블을 하나만 사용해서 통합한다.
  • 서브타입 테이블로 변환 (구현 클래스 테이블 전략)

    • 서브 타입마다 하나의 테이블을 만든다.

1. 조인 테이블 전략(InheritanceType.JOINED)


엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다.

이러한 방식의 문제점은 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없다.

이러한 문제는 DTYPE컬럼을 구분 컬럼으로 사용한다.

장점

  • 테이블의 정규화
  • 외래 키 참조 무결성 제약조건을 활용할 수 있다.
  • 저장공간을 효율적으로 사용한다.

단점

  • 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있다.
  • 조회 쿼리가 복잡하다.
  • 데이터를 등록할 INSERT SQL을 두번 실행한다.

2. 단일 테이블 전략(InheritanceType.SINGLE_TABLE)

가장 빠른 데이터 처리를 가지는 전략으로 구분 컬럼(DTYPE)으로 어떤 자식 데이터가 저장되어있는지 구분한다.

때문에 @DiscriminatorColumn을 꼭 설정해야 한다.

장점

  • 조인이 필요 없어 조회가 가장 빠르다.
  • 단순한 조회 쿼리

단점

  • 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야한다.
  • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 즉, 성능이 나빠질 수 있다.

3. 구현 클래스마다 테이블 전략(InheritanceType.TABLE_PER_CLASS)

자식 엔티티마다 테이블을 만드는 방법이다.

장점

  • 서브 타입을 구분해서 처리할 결우 효과적이다.
  • not null 제약 조건을 사용할 수 있다.

단점

  • 여러 자식 테이블을 함께 조회할 떼 성능이 느리다.
  • 자식 테이블을 통합헤서 쿼리하기 어렵다.
반응형

'JPA' 카테고리의 다른 글

ORM에서의 객체 연관 매핑  (0) 2022.06.26
준영속 상태의 지연 로딩 문제를 해결  (0) 2022.06.25
프록시  (0) 2022.05.14
임베디드 타입, 엔티티 타입  (0) 2022.05.13
JPA 에서의 식별과 비식별  (0) 2022.05.12
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함