상속관계 매핑
객체의 상속구조를 DB의 슈퍼타입 서브타입관계로 매핑을 하는 것이다
- 조인 전략
- 단일 테이블 전략
- 개별 테이블 전략
조인전략
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn//생략가능
@Inheritance
어노테이션을 이용하여 join전략으로 전략을 선택을 하면 된다
@DiscriminatorColumn
어노테이션은 자식 테이블을 구별을 할 수 있도록 도와주는데 default값은 DTYPE으로 컬럼명이 정해진다
자식 테이블 구분 컬럼 값을 직접 지정을 하고 싶으면
@DiscriminatorValue("값")
을 자식 객체에 지정을 해주면 해당 값으로 칼럼 값이 지정이 된다 default로는 객체 명 사용
자식 테이블의 기본 키 칼럼 명을 변경하고 싶으면
@PrimaryKeyJoinColumn("칼럼명")
을 사용하면 된다
단일 테이블 전략
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn//생략시 자동 생성
조인을 사용하지 않고 하나의 테이블에서만 사용이 되기때문에 일반적으로 가장 빠르다
개별 테이블 전략
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
자식 엔티티 마다 테이블을 만든다
@MappedSuperClass
정보를 가지고 있는 클래스에 해당 어노테이션을 적용을 하고 나머지 자식클래스에 상속을 하면 된다 이때 부모 클래스는 추상클래스로 만들어 추가적인 접근을 막도록 해야 한다
@MappedSuperclass
public class BaseEntity {
private Long id;
}
자식 클래스에서 부모로 부터 상속받은 컬럼명을 수정을 하고 싶으면@AttributeOverride
, @AttributeOverrides
(둘 이상 재정의 할때) 를 사용을 하면 된다
@AttributeOverride(name = "id", column= @Column(name = MEMBER_ID))
*상속관계 매핑과 MappedSuperClass의 차이
상속관계 매핑은 부모 자식클래스 모두 DB테이블에 매핑을 시키지만 MappedSuperClass는 자식 클래스만 DB테이블에 매핑을 시키고 부모 클래스는 오직 정보만을 자식 클래스에 제공을 하는 것이다 오로지 정보만을 상속을 시키는 목적으로 사용된다
참고
자바 ORM 표준 JPA 프로그래밍 - 기본편_김영한 님 강의
https://www.inflearn.com/course/ORM-JPA-Basic
책 - 자바 ORM 표준 JPA 프로그래밍
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330
'공부기록 > JPA' 카테고리의 다른 글
JPA-프록시 (0) | 2022.01.26 |
---|---|
JPA-고급매핑2 (0) | 2022.01.20 |
JPA 연관관계 매핑 (0) | 2021.12.29 |
JPA 엔티티 (0) | 2021.12.26 |
JPA시작 (0) | 2021.12.24 |