반응형
- 관계형 DB는 상속관계 x
- 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사
- 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입, 서브탕비 관계를 매핑
@DiscriminatorColumn
- 상속관계의 테이블이 어떤 테이블에서 온것인지 알 수 있다.
- 컬럼명은 DTYPE으로 default로 생성되는데 이를 바꾸고싶다면 (name = "ColumnName")옵션을 설정해주면 된다.
@DiscirminatorValue
위의 사진에서 ALBUM 은 "A"로 Dtype컬럼에 저장하고 MOVIE는 "M"으로, BOOK은 "B"로 저장하고 싶다면 상속받은 각 서브클래스에 @DiscriminatorValue("A") 로 넣어주면 된다.
상속테이블 생성으로인한 여러개 테이블을 단일테이블로 생성하는 방법
프로젝트의 크기나 유지보수에 따라 단일테이블로 생성할 수 도 있다.
위 사진의 테이블을 보면 ITEM테이블 한개로 앨범, 무비, 북 모든테이블을 관리할수 있도록 설게되어있으며 구분하기위해 DTYPE컬럼을 사용한다. 그렇다면 이미 만들어진 서브 엔티티들을 활용하여 어떻게 단일테이블을 만들 수 있을까???
package com.hellojpa;
import javax.persistence.*;
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
@Inheritance 어노테이션의 starategy옵션을 SINGLE_TABLE로 주면 된다.
단일테이블로 생성하게되면 테이블생성, insert 작업시에 한개의 쿼리만 돌기때문에 성능상의 이점을 가질 수 있다.
반응형
'Java' 카테고리의 다른 글
[JPA]JPQL (0) | 2022.05.11 |
---|---|
[JPA] 값타입 (0) | 2022.05.03 |
[JPA] Proxy, 즉시로딩, 지연로딩 (0) | 2022.04.01 |
[JPA] 양방향 관계 (0) | 2022.03.30 |
[JPA] (0) | 2022.03.13 |