본문 바로가기

자바 ORM 표준 JPA 프로그래밍

7장_고급 매핑

상속 관계 매핑

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

  • 장점
    • 테이블이 정규화된다.
    • 외래키 참조 무결성 제약조건을 활용할 수 있다.
    • 저장공간을 효율적으로 사용한다.
  • 단점
    • 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있다.
    • 조회 쿼리가 복잡하다.
    • 데이터를 등록할 때 INSERT SQL을 두 번 실행한다.

2. 통합 테이블로 변환(단일 테이블 전략)

  • 장점
    • 조인이 필요없으므로 일반적으로 조회 성능이 빠르다.
    • 조회 쿼리가 단순하다.
  • 단점
    • 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야 한다.
    • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 그러므로 상황에 따라서는 조회 성능이 오히려 느려질 수 있다.
  • 구분 컬럼을 꼭 사용해야 한다. @DiscriminatorColumn을 꼭 설정해야 한다.
  • @DiscriminatorValue를 지정하지 않으면 기본으로 엔티티 이름을 사용한다.

3. 서브타입 테이블로 변환(구현 클래스마다 테이블 전략)

  • 장점
    • 서브 타입을 구분해서 처리할 때 효과적이다.
    • not null 제약조건을 사용할 수 있다.
  • 단점
    • 여러 자식 테이블을 함께 조회할 때 성능이 느리다(SQL에 UNION을 사용해야 한다).
    • 자식 테이블을 통합해서 쿼리하기 어렵다.
  • 완전 비추

@MappedSuperclass

부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass를 사용한다.

실제 테이블과 매핑되지 않고, 단순히 매핑 정보를 상속할 목적으로만 사용된다.

추상 클래스와 비슷하다.

  • 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
  • @MappedSuperclass로 지정한 클래스는 엔티티가 아니므로 em.find()나 JPQL에서 사용할 수 없다.
  • 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.

 

 

'자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

9장_값 타입  (0) 2022.01.12
8장_프록시와 연관관계 정리  (0) 2022.01.11
6장_다양한 연관관계 매핑  (0) 2022.01.10
5장_연관관계 매핑 기초  (0) 2022.01.10
4장_엔티티 매핑  (0) 2022.01.06