-
[JPA]고급 매핑Backend/JPA 2021. 12. 13. 15:01
고급 매핑
상속관계 매핑
- 관계형 데이터베이스는 상속 관계 X
- 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사
- 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑
왼쪽의 그림은 DB쪽 논리 모델구성하는 것 슈퍼타입 서브타입
오른쪽의 그림은 객체에서의 상속 관계
슈퍼타입 서브타입 논리 모델을 실제 물리 모델을 구성하는 방법은 크게 3가지가 존재
- 각각테이블로변환 -> 조인전략
- 통합테이블로변환 -> 단일테이블전략
- 서브타입테이블로변환 -> 구현클래스마다테이블전략
- @Inheritance(strategy=InheritanceType.XXX)(기본적으로는 단일테이블 전략을 사용)
- JOINED: 조인전략
- SINGLE_TABLE: 단일테이블전략
- TABLE_PER_CLASS: 구현클래스마다테이블전략
- @DiscriminatorColumn(name=“DTYPE”)
- @DiscriminatorValue(“XXX”)
첫번 째 조인 전략
Item이라는 테이블을 만든 이후 조인으로 데이터를 구성하는 방법
Item에는 Item_ID를 두고 insert로 ITEM 과 ALBUM을 두고 select의 조인을 통해 값을 구하는 방법(정규화된 방식)
장점
- 정규화가 잘 되어있습니다.
- 외래 키 참조 무결성 제약조건 활용가능()
- 저장공간 효율화
단점
- 조회시 조인을 많이 사용, 성능이 저하되는 점.
- 조회 쿼리가 복잡함
- 데이터 저장시 insert sql 2번 호출
- 테이블이 많아 복잡하다는 점?.
두번 째 단일 테이블 전략
그냥 컬럼을 다 넣어 DTYPE이라는 것을 활용하여 구분하는 방법(단순하고 성능이 괜춘)
장점
- 조인이 필요 없으므로 일반적으로 조회 성능이 빠르다
- 조회 쿼리가 되게 단순함 한 테이블만 보므로
단점
- 자식 엔티티가 매핑한 컬럼은 모두 null허용
- 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있고, 상황에 따라서 조회 성능이 오히려 느려질 수 있다.
세번 째 구현 클래스마다 테이블 전략(별로 안중요)
클래스마다 각각 정보를 가지고 있으며 시작하는 방법(NAME PRICE의 공통사항을 다가지고옴, item을 없애고)
->쓰면 안되는 전략
이 전략은 데이터베이스 설계자와 ORM 설계자가 둘다 추천하지 않는 전략
장점
- 서브타입을명확하게구분해서처리할때효과적
- not null 제약조건사용가능
단점
- 여러자식테이블을함께조회할때성능이느림(UNION SQL 필요)
- 자식테이블을통합해서쿼리하기어려움
중요한점은 단일테이블과 조인전략에 대해 장단점을 가지고 가야한다는 점!
기본으로 조인전략을 깔고 단순한 테이블에 대해서는 단일 테이블 전략을 사용!
@MappedSuperclass
공통 매핑 정보가 필요할 때 사용 (id,name)
예시)member extends BaseEntity이렇게 하여 사용합니다.
상속관계매핑X
- 엔티티X, 테이블과매핑X
- 부모클래스를상속받는자식클래스에매핑정보만제공
- 조회, 검색불가(em.find(BaseEntity) 불가)
- 직접생성해서사용할일이없으므로추상클래스권장
- 테이블과관계없고, 단순히엔티티가공통으로사용하는매핑 정보를모으는역할
- 주로등록일, 수정일, 등록자, 수정자같은전체엔티티에서공통 으로적용하는정보를모을때사용
- 참고: @Entity 클래스는엔티티나 @MappedSuperclass로지 정한클래스만상속가능
'Backend > JPA' 카테고리의 다른 글
[JPA]다양한 연관관계 매핑 (0) 2021.12.10 [JPA]연관관계 매핑 기초 (0) 2021.12.06 [JPA]엔티티 매핑 (0) 2021.12.02 [JPA]JPA 소개_사용 이유 (0) 2021.12.01 [JPA]섹션3_영속성관리_내부동장방식 (0) 2021.11.29