시냅스

JPA 상속관계 매핑 정리 본문

Java, Spring/JPA

JPA 상속관계 매핑 정리

ted k 2022. 9. 17. 13:35

상속관계 매핑

  • 관계형 데이터베이스는 상속 관계가 없다.
  • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.
  • 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈터파입 서브타입 관계를 매핑
  • 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
  • 조인전략
    • 각각 테이블로 변환
    • 장점
      • 테이블 정규화
      • 외래 키 참조 무결성 제약조건 활용 가능
      • 저장공간 효율화
    • 단점
      • 조회시 조인을 많이 사용, 성능 저하
      • 조회 쿼리가 복잡함
      • 데이터 저장시 Insert sql 2번 호출
  • 단일 테이블 전략
    • 통합 테이블로 변환
    • 장점
      • 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
      • 조회 쿼리가 단순함
    • 단점
      • 자식 엔티티가 매핑한 컬럼은 모두 Null 허용
      • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있음, 상황에 따라 조회 성능이 오히려 느려질 수 있음
      •  
  • 구현 클래스마다 테이블 전략
    • 서브타입 테이블로 변환
    • 사용을 권장하지 않는다.

 

@Entity
@Inheritance(strategy = InheritanceType.@@@)
public class Item {
    @Id @GeneratedValue
    private Long id;
    private String name;
    private int price;
}

@Entity
public class Album extends Item {
    private String artist;
}

@Entity
public class Movie extends Item {
    private String director;
}

@Entity
public class Book extends Item {
    private String author;
    private String isbn;
}
  • @Inheritance(strategy=InheritanceType.@@@)
    • JOINED -> 조인 전략
    • SINGLE_TABLE -> 단일 테이블 전략
    • TABLE_PER_CLASS -> 구현 클래스마다 테이블 전략
  • @DiscripminatorColumn(name="DTYPE")
  • @DiscriminatorValue("@@@")

'Java, Spring > JPA' 카테고리의 다른 글

JPA 프록시 관련 정리  (0) 2022.09.17
JPA MappedSuperclass 정리  (0) 2022.09.17
JPA 연관관계 정리  (0) 2022.09.16
JPA 엔티티 매핑 정리  (0) 2022.09.16
JPA 영속성 컨텍스트 정리  (0) 2022.09.16
Comments