상속 관계 매핑

RDBS 에는 상속 관계 대신 슈퍼타입 서브타입 관계 (Super-Type Sub-Type Relationship) 모델링 기법이 존재한다. ORM 에서 얘기하는 상속 관계 매핑은 객체의 상속 구조와 DB 의 슈퍼타입 서브타입 관계를 매핑하는 것이다.

Super-Type Sub-Type Relationship

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;
}

위와 같을 때, 테이블은 다음과 같이 형성된다

image.png

image.png

image.png