본문 바로가기
프로그래밍/Spring

[JPA] 상속관계 매핑

by YuminK 2023. 8. 10.

상속관계 매핑

1. 관계형 데이터베이스는 상속 관계X

2. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사

3. 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼 타입 서브 타입관계를 매핑

각각의 테이블로 변환 => 조인 전략(각각 INSERT하고 조회할 때 JOIN사용)

통합 테이블로 변환 => 단일 테이블 전략(모든 필드를 하나의 테이블에)

서브타입 테이블로 변환 => 구현 클래스마다 하나의 테이블(부모 클래스는 따로 만들지 않는다)

 

조인 전략

장점 

1. 테이블 정규화

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

3. 저장 공간의 효율화

 

단점

1. 조회시 조인을 많이 사용(성능 저하)

2. 데이터 저장시 INSERT문 2번

3. 조회 쿼리가 복잡함

단일 테이블 전략

장점

1. 조인이 필요 없으므로 일반적으로 조회 성능이 빠르다.

2. 조회 쿼리가 단순하다.

 

단점

1. 자식 엔티티가 매핑한 컬럼은 모두 nullable

2. 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. (상황에 따라 조회 성능이 나오지 않을 수 있음)

 

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

쓰지 않는 것을 추천한다. DB 설계자, ORM 전문가 모두 추천하지 않는 전략

 

장점

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

2. not null 제약 조건 사용 가능

 

단점

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

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

 

@MappedSuperclass

@MappedSuperclass

1. 상속 관계 매핑X

2. 부모클래스는 자식 클래스에 매핑 정보만 제공한다. 

3. BaseEntity를 이용한 조회가 불가능하다.

4. 부모 클래스는 abstract 권장

 

테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할이다. 

주로 등록일, 수정일 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.

 

참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속받을 수 있다. 

 

출처: 자바 ORM 표준 JPA 프로그래밍(김영한)

'프로그래밍 > Spring' 카테고리의 다른 글

[JPA] 프록시와 연관관계  (0) 2023.08.11
[JPA] 영속성 관리  (0) 2023.08.10
[JPA] 왜 JPA를 사용해야 하는가?  (0) 2023.08.10
[Spring] 스프링 MVC 구조  (0) 2023.08.10
[JPA] 테이블 연관관계 정리  (0) 2023.08.06

댓글