BE/JPA

[JPA] 12. 상속관계 매핑

멍목 2022. 4. 19. 22:13
반응형

자바 ORM 표준 JPA 프로그래밍

 

 

 

 

이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.

 

 

 

1. 상속관계 매핑

  • 관계형 DB에는 상속 관계가 없음 (대신, 슈퍼타입 서브타입 관계가 존재함)
  • 상속관계 매핑 : 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
    • 하나의 마스터 테이블과 각각의 서브테이블로 분리하여 변환 : 조인 전략
    • 하나의 테이블로 합쳐서 변환 : 단일 테이블 전략
    • 마스터 테이블의 컬럼을 서브타입 테이블에 넣어 서브타입 테이블로만 변환 : 구현 클래스마다 테이블 전략
    • 마스터 테이블은 추상 클래스로 생성하는 것이 맞음
  • 주요 어노테이션
    • @Inheritance(strategy=InheritanceType.XXXX)
      • JOINED : 조인 전략
      • SINGLE_TABLE : 단일 테이블 전략 (DEFAULT)
      • TABLE_PER_CLASS : 구현 클래스마다 테이블 전략
    • @DiscriminatorColumn(name="DTYPE")
      • 어느 테이블에서 생성된 건지에 대한 구분을 넣어주는 컬럼
      • default : DTYPE
    •  @DiscriminatorValue("XXXX")
      • 조인 전략 시, DiscriminatorColumn에 들어가는 값을 객체 이름이 아닌 커스텀 하고 싶을 때 사용
      • default : 객체 이름

 

 

2. 조인 전략

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

 

3. 단일 테이블 전략

  • 장점
    • 조인이 필요 없으므로 조회 성능이 좋음
    • 조회 쿼리 단순
  • 단점
    • 자식 엔티티가 매핑한 컬럼은 모두 null 허용
    • 단일 테이블에다가 다 저장하므로, 데이터 양이 많아지거나 테이블이 커지는 상황에 따라 조회 성능이 느려질 수 있음

 

4. 구현 테이블 전략

  • 이 전략은 DB설계자와 ORM전문가 모두 추천하지 않음
  • 장점
    • 서브 타입을 명확하게 구분해서 처리할 때 효과적
    • not null 제약 조건 사용 가능
  • 단점
    • 여러 자식 테이블을 함께 조회할 때 성능이 느림
    • 자식 테이블을 통합해서 쿼리하기 어려움

 

 

5. @MappedSuperclass

  • 공통 매핑 정보가 필요할 때 사용  (작성자, 작성일, 수정자, 수정일과 같은 모든 테이블에 들어가는 컬럼들을 넣어두면 좋음)
  • 상속관계 매핑 X
  • 엔티티 X
  • 테이블과 매핑 X(테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할)
  • 부모 클래스를 상속받는 자식 클래스에 매핑 정보를 제공함
  • 조회, 검색 불가
  • 직접 생성해서 사용할 일이 없으므로 추상클래스 권장 
반응형