고급맵핑 / MappedSuperClass

Shaun·2021년 9월 2일
1

JPA

목록 보기
13/31

상속관계 맵핑

  • 관계형 데이터베이스는 상송관계가 없다

  • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다

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

상속관계 맵핑에는 크게 3가지 방법이 있다.

  1. 각각테이블로 변환 -> Join전략
    ->(@Inheritance(strategy=InheritanceType.JOINED)
  1. 하나의 테이블로-> 단일 테이블 전략
    ->디폴트 전략
    ->(@Inheritance(strategy=InheritanceType.XXX)

  2. 서브타입 테이블로 변환 (이 방법은 문제도많고 권장하지 않는 방법이므로 생략)

1. Join전략

  • 가장 정규화된 전략

  • DTYPE 로 구분한다. DYPE의 디폴트 값은 자식엔티티 이름이다.

  • @DiscriminatorColumn 으로 DYPE 생성

  • DYPE 디폴트값 수정 가능/ DYPE 로 구분한다

2. 단일전략

  • JOIN 방식을 사용하다 단일전략으로 바꾸고 싶을때는 저렇게 SINGLE_TABLE만 수정하면된다 (JPA장점)

  • DTYPE 로 구분한다

장점/단점

1. Join 전략
-장점: 테이블 정규화 /저장공간 효율화
-단점: 조회시 많은 join 사용 성능저하/ 조회쿼리 복잡

2. 단일 전략
-장점= 성능이 가장 잘나온다.(JOIN문 따로 필요없으니)
-단점= 필요한 데이터를 제외한 나머지는 NULL허용 해줘야함

-> 기본적으로 Join전략을 바탕으로 두고 하자!

@MappedSuperClass


객체 입장에서 속성만 상속 받고 싶을떄 (DB는 상관없다)(상속관계 맵핑=x)

  • @MappedSuperclass 라는 클래스를 extends 해서 사용한다.

  • 공통적으로 사용할 속성

  • 테이블과 맵핑 x

  • 추상클래스로 사용 권장

JPA 에서 extedns 쓸떄는 @Entity 이거나 @MappedSuperclass

profile
호주쉐프에서 개발자까지..

0개의 댓글