RDBS 에는 상속 관계 대신 슈퍼타입 서브타입 관계 (Super-Type Sub-Type Relationship) 모델링 기법이 존재한다. ORM 에서 얘기하는 상속 관계 매핑은 객체의 상속 구조와 DB 의 슈퍼타입 서브타입 관계를 매핑하는 것이다.
Super-Type Sub-Type Relationship
객체 상속 모델
✓ 슈퍼타입 서브타입 논리 모델 → 실제 물리 모델 테이블 구현하는 3가지 방법
엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본키+외래키 로 사용하는 전략을 말한다. 따라서 조회할 때 조인을 자주 사용한다.
주의할 점은 객체는 타입으로 구분할 수 있지만, 테이블은 타입 개념이 없다. → 따라서 타입을 구분하는 컬럼 필요! (
DTYPE
)
/* Animal */
@Entity
@Inheritance(strategy = InheritanceType.JOINED) //조인 전략
@DiscriminatorColumn(name = "DTYPE") // 자식을 구분하기 위한 컬럼 추가!
public abstract class Animal {
@Id @GeneratedValue
private Long id;
private String name;
}
/* Dog */
@Entity
@DiscriminatorValue("dog") // 구분값
public class Dog extends Animal {
private String breed;
}
/* Cat */
@Entity
@DiscriminatorValue("cat")
public class Cat extends Animal {
private String color;
}
위와 같을 때, 테이블은 다음과 같이 형성된다