JPA 기본 7
상속관계 매핑
상속관계 매핑이란?
- 관계형 데이터베이스는 상속 관계가 없다.
- 객체에는 상속 관계가 있는데, 관계형 DB에서 그나마 상속 관계와 비슷한 것은 슈퍼타입, 서브타입 관계 모델링 기법이다.
- 즉, 객체의 상속 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑하는 것을 말한다.
조인 전략
- 각각 테이블로 변환한다.
strategy = InheritanceType.JOINED
- 장점 : 테이블 정규화 되어 있다, 외래 키 참조 무결성 제약조건 활용이 가능하다, 저장공간이 효율화 되어 있다.
- 단점 : 조회 시 조인을 많이 사용해 성능 저하된다, 조회 쿼리가 복잡하다, 데이터 저장 시 INSERT 쿼리가 2번 호출된다.
단일 테이블 전략
- 통합 테이블로 변환한다.
- JPA의 기본 전략이다.
- 장점 : 조인이 필요 없어 조회가 빠르다, 조회 쿼리가 단순하다.
- 단점 : 자식 엔티티가 매핑한 컬럼은 모두 null이 허용되어야 한다, 단일 테이블에 저장하니 크기가 커지면 오히려 조회 성능이 떨어질 수 있다.
구현 클래스마다 테이블 전략
- 서브타입 테이블로 변환한다.
- 쓰면 안되는 전략이다.
- 장점 : 서브 타입을 명확하게 구분해서 처리 시 효과적이다, not null 제약조건 사용이 가능하다.
- 단점 : 여러 자식 테이블 조회 시 성능이 떨어진다(UNION 쿼리를 날려야 함), 자식 테이블을 통합해서 쿼리하기 어렵다.
@DiscriminatorColumn(name=”DTYPE”)
- 클래스에 해당 애너테이션을 붙여 DB에 DTYPE을 추가한다.
@DiscriminatorValue(“val”)
- 클래스에 해당 애너테이션을 붙여 DB에 val이란 이름의 DTYPE을 추가한다.
@MappedSuperclass
- 공통 매핑 정보가 필요할 때 사용한다.(id, name)
- 상속관계 매핑이 아니다.
- 엔티티가 아니고, 테이블과 매핑되지 않는다.
- 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다.
- 조회나 검색이 불가하다.
- 직접 생성 및 사용할 일이 없으니 추상 클래스 사용을 권장한다.
Comments powered by Disqus.