DB 모델링기법 중에 슈퍼-서브타입 모델링(엔티티가 상속관계를 이룸)이라는게 있는데,
논리모델은 같지만 실제 물리모델은 RollUp, RollDown, Identity 중 하나로 구현한다.
DB 슈퍼-서브타입
즉, 물리모델중 어느 방법으로 구현하냐에 따라서 테이블의 구조와 갯수가 변동된다.
실제 서비스 중 성능이 너무 안나와서 다른 물리모델로 교체하자라는 요청이 왔을때, JPA가 없다면 뜯어고칠게 엄청많을 것이다.
하지만 JPA와 함께라면,두려움없이 코드 몇줄의 수정으로 요청대로 물리모델에 매핑시킬 수 있다.
그 방법을 알아보자.
(개념은 DB의 슈퍼-서브타입부분에서 알아봤으므로 구현위주로 살펴보겠다)
예시 논리모델은 아래와같다.
@Entity
public abstract class Item{
@Id @generatedValue
private Long id;
private String name;
private BigDecimal price;
}
@Entity
public class Album extends Item{
private artist;
}
@Entity
public class Movie extends Item{
private director;
}
@Entity
public class Book extends Item{
private author;
}
@Inheritance
을 이용한 한줄로 매핑변경이 가능하다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Item{
@Id @generatedValue
private Long id;
private String name;
private BigDecimal price;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item{
@Id @generatedValue
private Long id;
private String name;
private BigDecimal price;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Item{
@Id @generatedValue
private Long id;
private String name;
private BigDecimal price;
}