이번 장에서는 여러 심화단계의 매핑 방법들에 대해서 살펴볼 것이다.
먼저, 상속관계 매핑에 대해서이다.
관계형 데이터베이스에는 상속관계가 없지만 이와 유사한 SuperType, SubType을 이용해서 객체의 상속관계와 매핑하게된다.
테이블로 구현하게 될 때에는 3가지 방법을 선택할 수 있는데, 이를 살펴보자.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
...
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item {
private String artist;
...
}
@Entity
@DiscriminatorValue("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;
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
...
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item {
private String artist;
...
}
@Entity
@DiscriminatorValue("M")
public class Movie extends Item {
private String director;
private String actor;
...
}
@Entity
@DiscriminatorValue("B")
public class Book extends Item {
private String author;
private String isbn;
...
}
@DiscriminatorColumn
이나 @DiscriminatorValue
같은 구분 컬럼을 필수로 입력해줘야한다.