관계형 데이터베이스는 상송관계가 없다
슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다
상속관계 맵핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 맵핑
상속관계 맵핑에는 크게 3가지 방법이 있다.
하나의 테이블로-> 단일 테이블 전략
->디폴트 전략
->(@Inheritance(strategy=InheritanceType.XXX)
서브타입 테이블로 변환 (이 방법은 문제도많고 권장하지 않는 방법이므로 생략)
가장 정규화된 전략
DTYPE 로 구분한다. DYPE의 디폴트 값은 자식엔티티 이름이다.
@DiscriminatorColumn 으로 DYPE 생성
DYPE 디폴트값 수정 가능/ DYPE 로 구분한다
JOIN 방식을 사용하다 단일전략으로 바꾸고 싶을때는 저렇게 SINGLE_TABLE만 수정하면된다 (JPA장점)
DTYPE 로 구분한다
장점/단점
1. Join 전략
-장점: 테이블 정규화 /저장공간 효율화
-단점: 조회시 많은 join 사용 성능저하/ 조회쿼리 복잡
2. 단일 전략
-장점= 성능이 가장 잘나온다.(JOIN문 따로 필요없으니)
-단점= 필요한 데이터를 제외한 나머지는 NULL허용 해줘야함
-> 기본적으로 Join전략을 바탕으로 두고 하자!
★ 객체 입장에서 속성만 상속 받고 싶을떄 (DB는 상관없다)(상속관계 맵핑=x)
@MappedSuperclass 라는 클래스를 extends 해서 사용한다.
공통적으로 사용할 속성
테이블과 맵핑 x
추상클래스로 사용 권장
JPA 에서 extedns 쓸떄는 @Entity 이거나 @MappedSuperclass