이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발]을 수강하며 정리한 글입니다.
🟦 기본 환경: IDE: IntelliJ, Language: Java
📚 수정일: 2023년 05월 30일
@Inheritance
Entity Class간 상속 관계를 나타내는 Annotation
1. InheritanceType.SINGLE_TABLE: 단일 테이블 전략
- 부모 클래스와 자식 클래스의 모든 속성을 단일 테이블에 저장
- DTYPE 컬럼을 사용하여 엔티티 타입을 식별
2. InheritanceType.JOINED: 구분 컬럼 전략
- 각 클래스마다 별도 테이블 생성, 부모 클래스의 속성은 부모 테이블에, 자식 클래스의 속성은 자식 테이블에 저장
- 조인을 사용하여 관련 테이블을 연결
- 각 테이블은 자식 클래스의 속성만을 포함하며, 공통된 속성은 부모 테이블에 저장
3. InheritanceType.TABLE_PER_CLASS: 서브클래스 테이블 전략
- 각 클래스마다 별도의 테이블을 생성, 각 테이블에 해당 클래스의 속성이 저장
- 공통된 속성은 부모 클래스에 저장되지 않음
@DiscriminatorColumn(name = "DTYPE")
: JPA에서 상속 관계를 매핑할 때 사용되는 Annotation
: 부모 클래스에 선언되며, 하위 클래스를 구분하는 용도의 컬럼을 생성
: 하위 클래스에서 @DiscriminatorValue를 통해 DTYPE 컬럼에 저장될 값을 지정
: @DiscriminatorColumn과 @DiscriminatorValue를 사용하여 상속 계층 구조에서 엔티티 클래스를 식별하면, JPA는 적절한 타입의 객체를 가져오고 다양한 타입의 객체를 사용하는 쿼리를 작성할 수 있음
상위 Entity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
@Id @GeneratedValue
@Column(name = "item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
|
cs |
하위 Entity
1
2
3
4
5
6
7
8
9
|
@Entity
@DiscriminatorValue("A")
@Getter @Setter
public class Album extends Item {
private String artist;
private String etc;
}
|
cs |
→ 상위 Entity table에 dtype이라는 column이 생성되고 Item을 상속하는 Album class는 dtype column에 "A"값으로 저장됨
'Java > JPA' 카테고리의 다른 글
[SpringBoot_JPA_1] JPA Entity Default Constructor (0) | 2023.05.23 |
---|---|
[SpringBoot_JPA_1] @JoinTable (0) | 2023.05.23 |
[SpringBoot_JPA_1] @Enumerated (0) | 2023.05.23 |
[SpringBoot_JPA_1] @OneToMany, @ManyToOne (0) | 2023.05.21 |
[SpringBoot_JPA_1] @Embeddable, @Embedded (0) | 2023.05.21 |