5. 상속 매핑
상속관계 매핑
설계를 하다보면 상속관계가 필요한 경우가 생긴다. 상위 클래스 '책' 과 '만화책', '소설책' 같은 상속관계는 RDB로 어떻게 표현해야 할까?
RDB 에는 상속관계가 존재하지 않는다. 대신, 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하기 떄문에 이를 이용한다.
조인 전략
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Item{
...
}
장점
- 테이블 정규화
- 저장공간 효율화
- 외래 키 참조 무결성 사용가능
단점
- 조회 시 조인을 많이 사용
-> 성능 저하 - 조회 쿼리가 복잡
- INSERT 시 SQL 2번 사용
단일 테이블 전략
장점
- 조인이 필요 없음
-> 빠르고 쿼리 단순
단점
- 매핑한 컬럼 모두 null 허용해줘야 함
- 자식 테이블의 필드 값이 한 테이블안에 들어가 있어서 필연적으로 null이 생길 수 밖에
- 테이블이 커져서 오히려 느려질 수 있음
구현 클래스마다 테이블 전략
장점
- 서브 타입을 명확하게 처리할 수 있음
- not null 제약조건 가능
단점
- 성능이 느림
- 자식 테이블을 통합해서 쿼리하기 어려움
주요 어노테이션
상속관계를 표현하는 방법에 사용되는 어노테이션이다.
@Inheritance(strategy=InheritanceType.XXX)
JOINED
: 조인 전략SINGLE_TABLE
: 단일 테이블 전략TABLE_PER_CLASS
: 구현 클래스마다 테이블 전략
@DiscriminatorColumn(name="DTYPE"), @DiscriminatorValue("XXX")
DTYPE 은 자식 테이블을 구분하기 위해서 사용한다. 부모 테이블에 @DiscriminatorColumn, 자식 테이블에 @DiscriminatorValue 를 달아주면 DB 에서 필드가 추가되고 자식 테이블을 쉽게 구분할 수 있다.
@MappedSuperClass
- 공통된 매핑 정보가 필요할 때 사용함
- 반복되는 같은 속성의 필드를 한 곳에 모아두는 개념
- 엔티티가 아니기 때문에 조회, 검색이 불가함
- 직접 생성해서 사용할 일이 없기 때문에 추상 클래스를 권장
출처
- 해당 포스트는 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 참고해서 작성되었습니다.
Author And Source
이 문제에 관하여(5. 상속 매핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chullll/5.-상속-매핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)