[JPA] 고급 매핑

Jiisuniui·2023년 12월 19일
0

JPA의 모든 것

목록 보기
6/8
post-thumbnail

고급 매핑

1. 상속관계 매핑

  • 관계형 데이터베이스는 상속관계 없음
  • 슈퍼타입 서브타입 관계라는 모델링 기법이 상속과 유사
  • 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입과 서브타입 관계를 매핑

2. 상속관계 매핑하는 방법

  • 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
  • JPA에서 기본 전략은 싱글테이블

주요 어노테이션

@Inheritance(strategy=InheritanceType.XXX)
 - JOIED: 조인 전략
 - SINGLE_TABLE: 단일 테이블 전략
 - TABLE_PER_CLASS: 구현 클래스마다 테이블 전략
@DiscriminatorColumn(name="DTYPE")
@DiscriminatorValue("XXX")

Join 전략

  • 각각 테이블로 변환 (잘 정규화 됨)

     @Entity
     @ingeritance(strategy = InheritanceType.JOINED)  // 전략 설정
     @DiscriminatorColumn  // DType이라고 default로 Entity명이 들어감. Entity 분류하는 것
     public class Item{
       @Id @GeneratedValue
       private Long id;
     
       private String name;
       private int price;  
     }
     
     @Entity
     @DiscriminatorValue("A")  // Dtype에 들어가게끔 자식 class에 붙임. 기본은 Entity명
     public class Album extends Item{
     }
     @Entity
     @DiscriminatorValue("B")  // Dtype에 들어가게끔 자식 class에 붙임. 기본은 Entity명
     public class Movie extends Item{
     }
     @Entity
     @DiscriminatorValue("C")  // Dtype에 들어가게끔 자식 class에 붙임. 기본은 Entity명
     public class Book extends Item{
     }
  • INSERT

    insert into
      Item(name,price,id)
    values
      (?,?,?)
    
    insert into
      Movie(actor,director,id)
    values
      (?,?,?)
  • SELECT

    select *
    from
      Movie
    inner join
      Item on Movie.id=Item.id
    where
      Movie.id=?

단일(싱글) 테이블 전략

  • 통합 테이블로 변환

구현 클래스마다 테이블 전략

  • 서브타입 테이블로 변환
profile
why error?

0개의 댓글