Notice
Recent Posts
Recent Comments
Link
enginner_s2eojeong
[자바 ORM 표준 JPA 프로그래밍] 07. 고급 매핑 본문
1. 상속관계 매핑이란?
- 관계형 데이터베이스에는 객체지향의 상속 개념이 존재하지 않음
- 대신, 슈퍼타입-서브타입 관계로 모델링할 수 있음
- JPA에서는 객체의 상속 구조를 데이터베이스에 맞춰 매핑할 수 있는 방법을 제공
JPA에서는 상속 구조를 테이블로 옮기기 위한 3가지 전략을 제공하고 있다.
2. 상속 매핑 전략 3가지
JPA에서 상속 매핑을 설정하려면 @Inheritance(strategy = ...) 어노테이션을 사용.
2.1 조인 전략 (JOINED)
- 슈퍼타입과 서브타입을 각각 테이블로 매핑
- 조인을 통해 하나의 객체 완성
@Inheritance(strategy = InheritanceType.JOINED)
장점
- 테이블 정규화
- 외래키 무결성 제약조건 사용 가능
- 저장 공간 효율적
단점
- 조회 시 조인 연산이 많아져 성능 저하
- 복잡한 조회 쿼리
- 저장 시 INSERT 두 번 호출
2.2 단일 테이블 전략 (SINGLE_TABLE)
- 모든 엔티티를 하나의 테이블에 저장
- 구분 컬럼(DTYPE)을 통해 타입 구분
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
장점
- 조회 시 조인 불필요, 성능 우수
- 쿼리가 단순함
단점
- 불필요한 null 컬럼 다수
- 테이블이 커져 조회 성능 저하 가능
2.3 구현 클래스마다 테이블 전략 (TABLE_PER_CLASS)
- 자식 엔티티마다 각각 테이블 생성
- 공통된 부모 필드는 자식 테이블마다 포함됨
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
장점
- 서브타입을 확실히 분리 가능
- NOT NULL 제약조건 가능
단점
- 자식 테이블 간 통합 조회가 어려움 (UNION 필요)
- 성능 저하 우려
대부분의 경우 조인 전략 또는 단일 테이블 전략을 사용한다.
3. @MappedSuperclass - 공통 필드 상속을 위한 방법
비즈니스 상속관계와 달리, 단순히 공통 매핑 정보(id, 등록일 등)만 상속하고 싶을 때는 @MappedSuperclass를 사용한다.
@MappedSuperclass
public abstract class BaseEntity {
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
특징
- 엔티티로 매핑되지 않음 → 테이블 X
- 공통 매핑 정보를 자식 엔티티에 전달
- em.find(BaseEntity.class) 불가
- 보통 추상 클래스로 선언
등록일, 수정일, 등록자 등 공통 필드를 재사용할 때 매우 유용하다.
'Backend > Database' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 06. 다양한 연관관계 매핑 (1) | 2025.04.14 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 05.연관관계 매핑 기초 (0) | 2025.04.06 |
[자바 ORM 표준 JPA 프로그래밍] 04.엔티티 매핑 (1) | 2025.03.26 |
[자바 ORM 표준 JPA 프로그래밍] 03.영속성 관리 (1) | 2025.03.19 |
[자바 ORM 표준 JPA 프로그래밍] 02.JPA 시작 (1) | 2025.03.16 |