beadss / jpa-study

jpa슽터디입니다
1 stars 2 forks source link

7장 정리중 #19

Open remagine opened 5 years ago

remagine commented 5 years ago

7장 고급 맵핑

상속관계맵핑

RDB에서는 상속이라는 개념이 없지만, 슈퍼서브 타입관계가 가장 유사한 구조를 가진다. 슈퍼서브 타입 논리모델을 물리 테이블에서 구현하는 전략은 3가지가 있다.

  1. 조인전략

객체 부모클래스 ITEM을 자식클래스에서 상속받은 후 맵핑전략, 부모 테이블의 있는 구분 컬럼, 자식 테이블 구분 컬럼값을 어노테이션으로 알려준다

맵핑전략 - @Inheritance > 어떤 전략을 사용할지, 조인전략은 inheritanceType.JOINED 구분컬럼 - @DiscriminatorColumn > 자식 클래스를 구별할 컬럼을 지정. 기본값은 DTYPE 구분컬럼값 - @DiscirimnatorValue > 엔티티 저장시 구분 컬럼에 입력할 값 지정.

기본키컬럼명 지정 - @PrimaryKeyJoinColumn > 자식 엔티티의 id 명을 지정하고 싶을 때 사용

_JPA 표준 명세_는 구분 컬럼을 사용하도록 하지만 하이버네이트 및 일부 구현체는 구분 컬럼 없이도 동작


  1. 단일 테이블 전략

하나의 테이블 = 부모,자식 클래스

위의 조인 전략의 정규화된 테이블을 역정규화하여 하나로 합친 형태로 구분컬럼 DTYPE으로 ENTITY를 구분한다. 필수

맵핑전략 명시 - @Inheritance(strategy - InheritanceType.SINGLE_TABLE)


  1. 구현 클래스 마다 테이블 전략

자식 엔티티마다 테이블을 만들고, 자식 테이블마다 각자 필요 컬럼을 가지고 있다. 즉 부모테이블 없이 자식 테이블이 부모엔티티의 PK와 공통필드까지 컬럼으로 가지고 있다.

맵핑전략 명시 - @Inheritance(strategy - InheritanceType.TABLE_PER_CLASS)