상속관계 매핑
: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑📌슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
- 각각 테이블로 변환 :
조인 전략
- 통합 테이블로 변환 :
단일 테이블 전략
- 서브타입 테이블로 변환 ->
구현 클래스마다 테이블 전략
@inheritance(strategy = inheritanceType.XXX)
JOINED
: 조인전략SINGLE_TABLE
: 단일 테이블 전략TABLE_PER_CLASS
: 구현 클래스마다 테이블 전략DiscriminatorColumn(name="DTYPE")
부모 클래스
에 구분 컬럼을 지정한다.DiscriminatorValue("XXX")
하위 클래스에 선언
클래스 이름
이 들어간다.모두 테이블로 만들어 조인
해서 조회@Inheritance(strategy = InheritanceType.JOINED)
외래 키 참조 무결성 제약조건
활용 가능@Entity
//조인 전략으로 지정
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn //DTYPE 생성
public class Item{
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}
@Entity
@DiscriminatorValue("A") //DTYPE명을 A로 지정
public class Album extends Item{
private String artist;
}
@Entity
@DiscriminatorValue("M") //DTYPE명을 B로 지정
public class Movie extends Item{
private STring director;
private STring actor;
}
단 하나의 테이블
에 저장되는 전략@Inheritance(strategy=InheratanceType.SINGLE_TABLE)
조회 성능이 빠름
@Entity
//단일 테이블 전략으로 지정
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColum
public class Item{
...
}
이 전략은 데이터베이스 설계자와 ORM 전문가 둘다 추천하지 않는다
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Entity
//구현 클래스마다 테이블 전략 예시
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
//추상클래스로 생성
public abstract class Item{
...
}