Super-Type Sub-Type Relationship
이라는 모델링 기법이 유사하다.Super-Type Sub-Type Relationship
을 매핑하는 것이다.Super-Type Sub-Type Relationship
의 논리 모델을 실제 물리 모델인 테이블로 나타내는 방법에는 3 가지 방법이 있다.각각의 객체를 모두 테이블로 만들고, 조회할 때는 조인을 활용한다.
DTYPE
)을 추가해야 한다.INSERT SQL
이 2번 실행된다.@Inheritance
상속 매핑을 할 때 부모 클래스에 어떤 전략을 사용할 것인지 지정해야 한다.
@DiscriminatorColumn
부모 클래스가 매핑된 테이블에서 자식을 구분하기 위해 사용한다.
name
속성은 DTYPE
이 기본 값으로 지정되어 있다.
@DiscriminatorValue
엔티티를 저장할 때, 부모 클래스를 매핑한 테이블의 구분 컬럼에 들어갈 값을 지정한다.
@PrimaryKeyJoinColumn
조인 전략은 자식 테이블들의 기본 키 컬럼명을 부모 테이블과 똑같이 매핑한다.
만약, 자식 테이블의 컬럼명을 변경하고 싶으면 name
속성에 value
를 지정한다.
Item
클래스@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DicriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id
@GeneratedValue
@Column (name = "ITEM_ID")
private Long id;
private String name;
private int price;
}
Album
, Movie
, Book
클래스@Entity
@DicriminatorValue("A")
public class Album extends Item {
private String artist;
...
}
@Entity
@DicriminatorValue("M")
public class Movie extends Item {
private String director;
private String actor;
...
}
@Entity
@DiscriminatorValue("B")
@PrimaryKeyJoinColumn(name = "BOOK_ID")
public class Book extends Item {
private String author;
private String isbn;
}
각각의 객체를 테이블을 하나만 사용해서 통합한다.
DTYPE
)을 사용해야한다.@DiscriminatorColumn
을 꼭 설정해야 한다.nullable
해야한다@DisCrimivatorValue
를 설정하지않으면, 엔티티 이름을 기본 값으로 사용한다.nullable
하게 해야한다.@DisCriminatorValue
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DisCriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
}
Album
, Movie
, Book
클래스@Entity
@DiscriminatorValue("A")
public class Album extends Item {
...
}
@Entity
@DiscriminatorValue("M")
public class Movie extends Item {
...
}
@Entity
@DiscriminatorValue("B")
public class Book extends Item {
...
}
자식 엔티티마다 하나의 테이블을 만든다.
not null
제약 조건을 사용할 수 있다.abstract
로 설정@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
}
Album
, Movie
, Book
클래스
상세한 설명 정말 감사드려요