Web/JPA

고급매핑

프로그래멍 2020. 2. 3. 20:13

* 상속 관계 매핑

 - 데이터 베이스엔 상속관계가 없다

 - 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑

 

 //부모 클래스	조인전략
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name=“DTYPE”)
 //자식 클래스
@DiscriminatorValue(“XXX”)

 //부모 클래스	단일 테이블 전략
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=“DTYPE”)
 //자식 클래스
@DiscriminatorValue(“XXX”)

//부모 클래스	구현 클래스마다 테이블 전략
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

* 테이블 별 장단점

 - 조인

  장점 : 테이블 정규화

          외래키 참조, 무결성 제약조건 활용가능

          저장공간 효율화

  단점 : 조회시 조인을 많이 사용 → 성능저하

          쿼리가 복잡해짐

          데이터 저장시 insert 2번 호출

 

 - 단일 테이블

   장점 : 조인X , 성능빠름 , 조회쿼리 단순

   단점 : 데이터가 들어간 자식 빼곤 다 Null 허용

           한 테이블에 다 때려박기 때문에 상황에 따라서 조회 성능이 오히려 느려질 수 있다.

 

 - 구현 클래스마다 테이블 (실무에서 사용하면 안됨)


* @MappedSuperClass

 - 상속 관계 매핑 아님

 - 공통 매핑 정보가 필요할 때 사용 (중복 변수)

         ex) String id; String name;

 - 엔티티 X , 테이블과 매핑 X

 - 조회, 검색 불가 (em.find(BaseEntity))

 - 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장