고급 매핑 - 상속 관계 매핑
#JPA/기본
/상속관계 매핑: DB에는 상속관계가 없다.
- 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑
 
- 각각 테이블로 변환 → 조인 전략
 - 통합 테이블로 변환 → 단일 테이블 전략
 - 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략
 
- 객체 입장에서는 셋 다 똑같음. 다 매핑이 가능함.
 - /주요 어노테이션
@Inheritance(strategy=InheritanceType.XXX)@DiscriminatorColumn(name="DTYPE")@DiscriminatorValue("XXX")
 
@DiscriminatorColumn추가 시 DTYPE 칼럼 생김.- DTYPE을 안넣어도 되는데, 넣어주는게 좋다.
 
@DiscriminatorValue("A")로 하위 테이블 이름 지정 가능- /조인 전략 - 장점
- 테이블 정규화
 - FK 무결성 제약조건 하위 타입까지 볼 필요 없는 경우 상위 타입만 조회하면 됨.
 - 저장 공간 효율적
 
 - /조인 전략 - 단점
- 조인으로 인한 성능저하. 데이터가 너무 많으면 오히려 성능이 좋을지도?
 - 조회 쿼리가 복잡
 - 데이터 저장 시 INSERT 두 번 나감.
 
 
- 하위 테이블 생성 X. 상위 테이블에 칼럼 다 포함됨.
 @DiscriminatorColumn이 없어도 자동으로 DTYPE이 생성된다.- /단일 테이블 전략 - 장점
- 조인이 필요 없으므로 일반적으로 조회 성능이 빠름. 쿼리도 단순함.
 
 - /단일 테이블 전략 - 단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용 무결성 애매해짐.
 - 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 상황에 따라서 조회 성능이 오히려 느려질 수 있다. (이런 경우는 거의 없긴 하다.)
 
 
- 상위 테이블 없애고 하위 테이블로 전부 내려버린 전략
 - 쓰지 말자.
- 상위 객체 조회시 하위 테이블을 전부 조회해서 UNION 해서 비효율적.
 
 - 장점
- 서브 타입 명확하게 구분.
 - not null 제약 조건 사용 가능
 
 - 단점
- 여러 자식 테이블을 함께 조회할 때 성능이 느림
 - 자식 테이블 통합해서 쿼리가 어려움.
 
 
- 공통 매핑 정보가 필요할 때 사용
- 생성일, 마지막 수정일, 생성한 사람, 수정한 사람
 
 - BaseEntity 테이블이 생성되는게 아니라, Member 테이블에 BaseEntity 필드에 해당하는 컬럼이 생성된다.
- BaseEntity는 추상 클래스로 선언하자. 엔티티가 아니므로 생성할 일이 없다.
 - 조회, 검색 불가(
em.find(BaseEntity)불가) 
 - 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공
 @Entity클래스는, 엔티티나@MappedSuperclass로 지정한 클래스만 상속 가능
- 파티셔닝등을 고려하면 테이블을 단순하게 유지하는게 좋음. 상속관계 많아지면 많이 복잡해짐.
 - 일단 객체지향적으로 쓰다가 트레이드 오프 경계 지점에서 구조를 수정하자.
 
Ref) 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편
'DB Access > JPA' 카테고리의 다른 글
| [JPA] 값 타입 (0) | 2025.07.01 | 
|---|---|
| [JPA] 프록시와 연관관계 관리 (0) | 2025.07.01 | 
| [JPA] 다양한 연관관계 매핑 (0) | 2025.07.01 | 
| [JPA] 연관관계 매핑 기초 (0) | 2025.07.01 | 
| [JPA] 엔티티 매핑 (0) | 2024.11.08 |