-
[JPA] 상속관계 매핑인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 15:12
- 어떤 전략을 사용하든 상위 타입은 abstract 클래스로 만드는 것이 좋다.(하위 타입 없이 상위 타입만 생성하는 경우는 없기 때문)
- 추상 클래스는 생성자를 가질 수 있다.(하위 타입에서 호출함으로써 인스턴스 필드를 초기화 하는 과정이 필요할 수도 있기 때문)
단일 테이블 전략 예제 코드
@NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING) public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; public Item(String name, int price) { this.name = name; this.price = price; } } @Getter @Entity @DiscriminatorValue("A") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Album extends Item { private String artist; @Builder public Album(String name, int price, String artist) { super(name, price); this.artist = artist; } } @Getter @Entity @DiscriminatorValue("M") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Movie extends Item { private String director; private String actor; @Builder public Movie(String name, int price, String director, String actor) { super(name, price); this.director = director; this.actor = actor; } } @Getter @Entity @DiscriminatorValue("B") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Book extends Item { private String author; private String isbn; @Builder public Book(String name, int price, String author, String isbn) { super(name, price); this.author = author; this.isbn = isbn; } }
- @Inheritance 자체를 생략하여도 기본적으로 JPA는 단일 테이블 전략을 사용한다.
- @DiscriminatorColumn을 생략하여도 하위 타입을 구분하는 컬럼도 자동으로 생성된다.
- 조인 전략이 정석이라고 생각하면 된다.
조인 전략 예시 코드
- 위의 단일 테이블에서 전략부분만 joined로 변경하면 된다.
- @DiscriminatorColumn을 이용하여 슈퍼타입에 하위타입을 구분하는 컬럼을 넣을 수 있다.
- @DiscriminatorValue를 이용하여 하위타입을 구분하는 컬럼에 들어가는 값을 지정할 수 있다. 기본값은 하위 타입의 엔티티명이다.
- 상위 클래스를 추상 클래스로 만들지 않으면 의도하지 않게 ITEM 테이블도 생성된다.
- @DiscriminatorColumn 해당 애너테이션은 필요가 없게 되고 적용이 안된다.
출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편
https://www.inflearn.com/course/ORM-JPA-Basic
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자
www.inflearn.com
'인프런 - 스프링 > JPA 프로그래밍 - 기본편' 카테고리의 다른 글
[JPA] 프록시 (0) 2023.11.27 [JPA] Mapped Superclass - 매핑 정보 상속 (0) 2023.11.27 [JPA] 다양한 연관관계 매핑 (1) 2023.11.27 [JPA] 연관관계 매핑 기초 (0) 2023.11.27 [JPA] 엔티티 매핑 (0) 2023.11.27