@Inheritance(strategy=InheritanceType.XXX)
- JOIED: 조인 전략
- SINGLE_TABLE: 단일 테이블 전략
- TABLE_PER_CLASS: 구현 클래스마다 테이블 전략
@DiscriminatorColumn(name="DTYPE")
@DiscriminatorValue("XXX")
각각 테이블로 변환 (잘 정규화 됨)
@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=?