본문 바로가기
프레임워크/JPA

[JPA] 여러가지 JPA 전략@Inheritance(strategy=InheritanceType.xxxx)

by Yikanghee 2022. 3. 21.

관계형 데이터베이스는 상속 관계가 없지만 JPA에서는 상속관계 매핑을 지원한다

슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하기 때문이다

 

| 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법

- 각각 테이블로 변환 > 조인 전략

- 통합 테이블로 변환 > 단일 테이블 전략

- 서브타입 테이블로 변환 > 구현 클래스마다 테이블 전략

- @Inheritance(strategy=InheritanceType.xxxx)

JOINED > 조인 전략

SINGLE_TABLE > 단일 테이블 전략

TABLE_PER_CLASS > 구현 클래스마다 테이블 전략

- @DiscriminatorColumn(name="xxx")

상속된 객체들을 name으로 분류해서 나누어줌

- @DiscriminatorValue(“XXX”)

마찬가지

 

| 조인 전략

- 장점

테이블 정규화

외래 키 참조 무결성 제약조건 활용가능

저장공간 효율화

- 단점

조회시 조인을 많이 사용, 성능 저하

조회 쿼리가 복잡함

데이터 저장시 INSERT SQL 2번 호출

| 단일 테이블 전략

- 장점

조인이 필요 없으므로 일반적으로 조회 성능이 빠름

조회 쿼리가 단순함

- 단점

자식 엔티티가 매핑한 컬럼은 모두 NULL 허용 (잘 안쓰는 치명적 이유)]

단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 상황에 따라서 조회 성능이 오히려 느려질 수 있다

| 구현 클래스마다 테이블 전략

- 장점 

서브 타입을 명확하게 구분해서 처리할 때 효과적

not null 제약조건 사용가능

- 단점

여러 자식 테이블을 함께 조회할 때 성능이 느림 (UNION SQL 필요)

자식 테이블을 통합해서 쿼리하기 어려움

※ 추천 X > 비효율


이 글은 김영한님의 JPA 강의를 공부한 글 입니다

댓글