JPA 상속관계
관계형 데이터 베이스는 상속관계 개념이 존재하지않아 슈퍼 타입과 서브 타입의 논리 모델을 실제 물리 모델로 구현하는 방법 3가지가 존재
- 각각 테이블로 변환 → 조인 전략
- 통합 테이블로 변환 → 단일 테이블 전략
- 하나의 테이블에 모든 컬럼을 집어넣고 dtype으로 구분
- 쿼리가 한번에
- 성능상 이점 존재
- 하나의 테이블에 모든 컬럼을 집어넣고 dtype으로 구분
- 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략
@Ingeritance로 테이블 전략 선택
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Inheritance(strategy = InheritanceType.JOINED)
장점: 테이블의 전략선택이 쉬워진다
@Discriminator → DB테이블에 dtype 설정
구현 클래스마다 테이블 전략
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
ㅈ장점: 단순 쿼리 사용에 이점이있음
단점: 쿼리 조회시 모든 테이블을 union하여 찾음 → 테이블 수가 많으면 굉장한 오버헤드 발생
상속관계 매핑
슈퍼클래스 선언
@MappedSuperclass
특정 컬럼을 다른 테이블들에서 같이 사용하고 싶을때 사용
엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
상속 관계 매핑 X
엔티티 X, 테이블과 매핑 X
부모 클래스를 상속받는 자식클래스에 매핑 정보만 제공 → 직접 접근 할 수 없음
직접 생성해서 사용할 일 없으므로 추상클래스 권장