이번 장에서는 여러 심화단계의 매핑 방법들에 대해서 살펴볼 것이다.

상속관계 매핑

먼저, 상속관계 매핑에 대해서이다.

관계형 데이터베이스에는 상속관계가 없지만 이와 유사한 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;
	...
}