기본편(7) - 고급매핑

bin1225·2021년 10월 5일
0

JPA

목록 보기
7/12
post-thumbnail

객체와 달리 관계형 데이터베이스는 상속이 존재하지 않는다. 하지만 '슈퍼타입 서브타입 관계'라는 모델링 기법이 이와 유사한데, 슈퍼타입 서브타입 모델링 기법과 상속을 매핑하는 것을 상속관계 매핑이라고 한다.

상속관계 매핑은 3가지 방법이 있다.
@Inheritance(strategy = ???)
1. 조인전략(InheritanceType.JOINED)
2. 단일 테이블 전략(InheritanceType.SINGLE_TABLE)
3. 구현 클래스마다 테이블 전략(InheritanceType.TABLE_PER_CLASS)

조인 전략

  • 객체 예시
  • 조인 전략 예시

그림처럼 자식 테이블에 모두 부모 테이블의 PK를 주고 DTYPE, 즉 자식테이블의 종류로 구별하는 방법이 JOIN 전략이다.
• @DiscriminatorColumn(name=“DTYPE”)
• @DiscriminatorValue(“XXX”)
이 두 어노테이션을 통해서 DTYPE column 의 이름을 정하고 그 value의 이름을 설정할 수 있다.

  • 장점
    - 테이블이 객체지향스럽게 설계된다.
    - 저장공간 효율화
  • 단점
    - 조회 쿼리가 복잡하다
    조회, 저장시 데이터베이스 호출 횟수가 늘어난다는 것도 있지만 성능에 크게 문제가 되지 않는다.

단일 테이블 전략

  • 단일 테이블 예시

말 그대로 부모 테이블 하나에 자식 테이블 정보를 모두 넣는 것을 의미한다.
가지고 있지 않은 속성은 null로 저장된다.

  • 장점
    - 빠르고 단순하다.

  • 단점
    - null값을 허용한다.
    - 테이블이 과하게 커져 성능저하가 발생할 수 있다.

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

  • 구현 클레스마다 테이블 전략 예시

    부모테이블의 속성을 자식 테이블 각각에 모두 넣는 것이다.

이 전략은 데이터베이스 설계자와 ORM 전문가 둘 다 추천하지 않으므로 사용하지 않는다.

@MappedSuperclass

@MappedSuperclass : 공통 매핑 정보가 필요할 때 사용하는 어노테이션

BaseEntity 와 같이 공통속성을 모아 @MappedSuperclass 어노테이션을 붙이면 다른 클래스에서 extends BaseEntity 를 통해 그 정보를 상속받을 수 있다.

• 부모 클래스는 자식 클래스에 매핑 정보만 제공한다, 엔티티로서의 기능은 수행할 수 없다.

• 직접 생성해 사용할 일이 없으니 추상 클래스를 권장한다.

0개의 댓글

관련 채용 정보