출처: 자바 ORM 표준 JPA 프로그래밍
계속 언급했지만 객체지향 언어와 관계형 DB는 패러다임의 불일치가 있다.
관계형 데이터베이스는 상속관계가 없고, 이와 유사한 슈퍼타입 서브타입 관계를 자바에 매핑해야한다.
주요 어노테이션
@Inheritance(strategy=InheritanceType.XXX)
• JOINED: 조인 전략
• SINGLE_TABLE: 단일 테이블 전략
• TABLE_PER_CLASS: 구현 클래스마다 테이블 전략
상속관계 매핑의 종류
1. 조인전략
장점
- 테이블 정규화가 잘됨
- 저장공간 효율적임: 각 엔티티 클래스가 필요한 필드만 가지고 있어서 null로 채워줄 필요 없음
- 외래 키 참조 무결성 제약조건 활용
단점
- 조회시 조인이 많이 발생(조회 쿼리가 복잡함)->성능저하
- 저장시 INSERT SQL이 두번 나감: Album 엔티티를 저장하면 실제 테이블로는 Album, Item 테이블로 찢어져서 저장됨
2. 단일 테이블 전략
장점
- 조회 성능이 좋음(쿼리가 단순함): 조인 안하니까
단점
- 자식 엔티티가 매핑한 칼럼은 전부 null 허용: 저장공간 효율 저하
- 오히려 조회 성능 느릴수도 있음: 자식 엔티티가 너무 많아서 단일 테이블이 커질때
3. 구현 클래스마다 테이블 전략
안쓴다.
장점
- 서브 타입을 명확하게 구분해서 처리할 때 효과적
- not null 제약조건 사용 가능
단점
-여러 자식 테이블을 함께 조회할 때 성능이 느림(UNION SQL 필요)
-자식 테이블을 통합해서 쿼리하기 어려움
@MappedSuperclass
이건 위처럼 엔티티를 상속관계 매핑하는게 아니다
상속관계 매핑도 아니고
엔티티도 아니고
테이블과 매핑하는것도 아니고
그저 자식클래스에 정보만 제공할 뿐이다.
주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.
'Dev > JPA' 카테고리의 다른 글
[강의정리] 영속성 전이, 고아객체, 생명주기 (0) | 2021.05.18 |
---|---|
[강의정리] 프록시와 연관관계 관리 (0) | 2021.05.18 |
[강의정리] 연관관계 매핑 (0) | 2021.05.17 |
[강의정리] 엔티티 매핑 (0) | 2021.05.17 |
[강의정리] 영속성 컨텍스트의 동작 (0) | 2021.05.17 |