DTYPE 컬럼을 사용해서 사용한다.
자식 테이블은 부모 테이블 키를 외래키이자 기본키로 사용한다.
부모 테이블은 해당 tuple을 무슨 자식이 상속했는지 DTYPE을 통해 알 수 있다.
부모 테이블에 자식 멤버들을 다 넣는다.
부모 테이블을 생략하고 자식 테이블에 부모 테이블의 키를 넣는다.
도메인 설계는 다 똑같다.
public @interface Inheritance {
InheritanceType strategy() default InheritanceType.SINGLE_TABLE;
}
기본적으로는 싱글테이블 전략이다.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}
@Inheritance 를 사용해서 전략을 바꿀 수 있다.
@DiscriminatorColumn 을 넣어주면 부모 테이블에 DTYPE coloumn이 자동생성 되고 자식 테이블을 생성하면 알아서 DTYPE에 자식 클래스 명이 들어간다.
싱글테이블 전략은 @DiscriminatorColumn이 없어도 hibernate가 알아서 Dtype을 만들어준다. 싱글테이블 전략은 기본 전략이기 때문에 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)을 생략해도 괜찮지만 그래도 이전략을 사용했다고 알아볼 수 있도록 @Inheritance(strategy = InheritanceType.JOINED)을 적도록 하자.
장점
단점
// TABLE_PER_CLASS 전략은 굉장히 비효율적으로 동작하므로 사용하지 말자
기본 base: 조인 전략
정말 단순한 경우: 싱글테이블 전략