상속관계 매핑
- 관계형 데이터베이스는 상속 관계가 없다.
- 슈퍼 타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다
- 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼 타입 서브타입 관계를 매핑
- 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 다음과 같다.
1. 각각 테이블로 변환 -> 조인 전략
2. 통합 테이블로 변환 -> 단일 테이블 전략
3. 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략
일반적으로 클래스에서 상속을 받은 객체들로 매핑을 하게 되면 하나의 테이블에 모든 컬럼이 생기게 된다.
여기서 부모 클래스에 아래의 코드와 같이 어노테이션을 추가하면 조인 전략으로 테이블을 설계할 수 있다.
- 조인 전략
위의 DB의 테이블을 보면 단일 테이블 전략 같은 경우 ITEM테이블에 모든 칼럼들이 들어가 있는 걸 볼 수 있는데, 조인 전략에서는 Item클래스와 상속받은 클래스의 테이블이 생성되고 PK이자 FK로 ITEM_ID를 가지고 있으며, 마치 자바의 상속과 매우 유사한 모습이다.
실제로 값을 넣어보았다. 위의 결과에서 보이는 MOVIE의 ID와 ITEM의 ID는 같다. 그 이유는 MOVIE에서 ID는 PK이자 FK이기 때문이다.(조인 전략)
- 단일 테이블 전략
위의 코드를 보면 JOIN전략에서 -> SINGLE_TABLE 전략으로 바꾸어서 매핑을 하였다. 이 경우 테이블 하나에 모든 컬럼들이 들어가게 되는데 여기서 DTYPE이라는 컬럼이 자동으로 들어가게 되고 DTYPE컬럼은 어떤 곳에서 매핑이 되었는지 보여주며 값을 넣은 곳을 제외한 컬럼들은 null값이 들어가게 된다.
- 구현 클래스마다 테이블 전략
구현 클래스마다 테이블 전략은 TABLE_PER_CLASS로 어노테이션을 지정하면 된다.
위의 경우 Item클래스는 추상 클래스로 선언해야 하며, 실제 동작시 Item클래스의 DB 테이블은 만들어지지 않고, ITem클래스의 필드 컬럼들이 이 Item클래스를 상속받은 하위 클래스들의 DB 테이블의 컬럼으로 들어가게 된다.
- 조인 전략
- 조인 전략 장점
- 테이블 정규화
- 외래 키 참조 무결성 제약조건 활용 가능
- 저장공간 효율화
- 조인 전략 단점
- 조회 시 조인을 많이 사용(성능 저하)
- 조회 쿼리가 복잡함
- 테이터 저장 시 insert 쿼리 2번 호출
- 단일 테이블 전략
- 단일 테이블 전략 장점
- 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
- 조회 쿼리가 단순함
- 단일 테이블 전략 단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용
- 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있고 상황에 따라서 조회 성능이 더 느려질 수 있다.
- 구현 클래스마다 테이블 전략
쓰지 말자.
정리 : 조인 전략을 기본으로 하되 단순한 설계 같은 경우 단일 테이블 전략을 사용하자.
- @MappedSuperclass
- 상속관계 매핑x
- 엔티티x, 테이블과 매핑x
- 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공
- 조회, 검색 불가
@MappedSuperclass는 상속관계 매핑과 관계없이 속성을 같이 사용하고 싶을 때 다음과 같이 사용한다.
위의 코드를 보면 @MappedSuperclass로 공통적으로 사용할 클래스의 필드를 지정해주고, 그 필드를 사용할 클래스에 상속을 해주었다.
그 후 값을 넣고 실행결과 MEMBER테이블에 Superclass를 지정한 필드의 컬럼들이 생성된 모습이다.
출처 : https://www.inflearn.com/course/ORM-JPA-Basic#
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔
www.inflearn.com

'JPA' 카테고리의 다른 글
값 타입 (0) | 2021.10.12 |
---|---|
프록시, 즉시 로딩과 지연 로딩 (0) | 2021.10.11 |
다양한 연관관계 매핑 (0) | 2021.10.09 |
연관관계 매핑 (0) | 2021.10.08 |
엔티티 매핑 (0) | 2021.10.07 |