관계형 데이터베이스와 객체의 상속 개념을 묶는 것 또한 JPA에서 도움을 줄 수 있다.
1. 각각의 부모와 자식들을 테이블로 생성하여 조회할 때 조인을 사용한다. JPA에서는 조인 전략이라고 한다.
2. 통합 테이블로 변환해 하나의 테이블로 상속을 관리한다. (단일 테이블 전략)
3. 서브타입 테이블로 전환하여 각 서브 타입마다 테이블을 만든다.
조인 전략
조인 전략은 각 객체를 모두 테이블로 만들고 자식 테이블이 부모의 기본 키를 받아서 해당 키를 기본키와 외래 키로 사용하는 전략이다.
객체에는 타입이 존재하지만 테이블에는 타입이라는 것이 없기 때문에 타입을 구분하는 칼럼이 필요하다.
부모의 객체의 코드에서의 설정은 다음과 같다.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPES")
public abstract class Item {
.....
}
-
@Inheritance : 상속 매핑은 부모 클래스에 해당 애노테이션을 사용한다. 그리고 매핑 전략을 지정해야 한다.
-
@DiscriminatorColumn : 부모 클래스에 자식들의 구분 칼럼을 지정한다. 이 칼럼으로 자식 테이블을 구분할 수 있게 된다.
-
@DiscrimininatorValue : 엔티티를 저장할 때 구분 칼럼 값에 저장할 입력값을 지정한다.
단일 테이블 전략
하나의 테이블에 구분 칼럼을 통해 어떠한 자식 데이터가 저장되어 있는지 구분하며 조회할 경우 조인이 필요 없기에 속도가 가장 빠르다. 하지만 이 전략은 자식 엔티티가 매핑한 칼럼들은 모두 null값을 허용해야 하는데 나머지 자식들의 값들이 비어있기 때문이다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPES")
public abstract class Item {
.....
}
Table_Per_Class 전략은 자식 엔티티마다 테이블을 만든다. 이 전략은 추천하지 않는 전략이다.
'데이터 접근 기술 > JPA' 카테고리의 다른 글
[JPA] JPQL 소개 (0) | 2021.01.30 |
---|---|
[JPA] 즉시 로딩과 지연 로딩 (0) | 2021.01.28 |
Entity 매핑 (0) | 2020.09.03 |
JPA 영속성 (0) | 2020.09.02 |
JPA 소개 (0) | 2020.09.01 |
댓글