Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- JPQL
- 지연 로딩
- docker compose
- @ComponentScan
- Web
- DI
- 서블릿 컨테이너
- AWS
- Spring
- Spring Data JPA
- CORS
- Routing Key
- MSA
- 쿠버네티스
- securitycontextholderfilter
- JPA
- JdbcTemplate
- mybatis
- redis
- Dead Letter Queue
- JWT
- DLQ
- Spring Container
- 페이징
- 컨테이너
- dockerhub
- @Transactional
- 스프링 부트
- kafka
- docker
Archives
- Today
- Total
look-forest
고급 매핑 본문
상속 관계 매핑 (for 다형성)
객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것을 말한다.
- 관계형 데이터베이스는 상속 관계가 없다.
- 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.

슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법
- 조인 전략 - 각각 테이블로 변환 ( JOINED )
- 단일 테이블 전략 - 통합 테이블로 변환 ( SINGLE_TABLE )
- 구현 클래스마다 테이블 전략 - 서브타입 테이블로 변환 ( TABLE_PER_CLASS )
@Inheritance(strategy=InheritanceType.XXX)라는 애노테이션에 해당 키워드를 입력하면 된다.
@DiscriminatorColumn(name=“DTYPE”)
1. 조인 전략
장점
- 테이블 정규화
- 외래 키 참조 무결성 제약조건 활용 가능
ORDER에서 ITEM을 주문할 때 MOVIE, ALBUM, BOOK 뒤질 필요없고 ITEM만 보면 된다. - 저장 공간 효율화
- 변경에 유리
단점
- 조회 시 조인을 많이 사용, 데이터 저장시 INSERT SQL 2번 호출 -> 성능 저하 (미비)






2. 단일 테이블 전략
장점
- 조인이 필요 없으므로 조회 쿼리가 단순하고 일반적으로 조회 성능이 빠름
단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용 (반대로 테이블 제약 조건에 NOT NULL 불가)
- 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다



3. 구현 클래스마다 테이블 전략
이 전략은 데이터베이스 설계자와 ORM 전문가 둘 다 추천하지 않는다.
- 자식 테이블을 통합해서 쿼리하기 어려움. 묶이질 않는다.
- 변경에 불리하다
- 특정 id로 조회할 때 UNION SQL이 필요하다. (어떤 테이블에 해당하는지 모르므로)


결론
기본적으로는 조인 전략을 사용하고, 단순하고 변경 가능성이 적으면 간단하게 단일 테이블 전략을 사용하자.
@MappedSuperclass (for 코드 재사용)
- 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할. (상속 관계 매핑이 아니다)
- 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용
- 엔티티X, 테이블과 매핑X -> 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장

예시



아래와 같이 이벤트를 붙여서 사용하곤 한다.

참고 자료 & 이미지 출처
자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한 님)
'JPA > JPA' 카테고리의 다른 글
| 값 타입 (0) | 2024.09.12 |
|---|---|
| 프록시와 연관관계 관리 (3) | 2024.09.10 |
| 다양한 연관 관계 매핑 (0) | 2024.09.09 |
| 연관관계 매핑 기초 (1) | 2024.09.09 |
| 엔티티 매핑 (1) | 2024.09.08 |