[ JPA ] 상속관계 매핑

유기훈·2022년 9월 27일
0

JPA

목록 보기
9/13
post-thumbnail

상속관계 매핑

  • 관계형 데이터베이스는 상속 관계X
  • 슈퍼타입 서브타입 관걔라는 모델링 기법이 객체 상속과 유사
  • 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑

1. 조인전략

DTYPE 컬럼을 사용해서 사용한다.
자식 테이블은 부모 테이블 키를 외래키이자 기본키로 사용한다.
부모 테이블은 해당 tuple을 무슨 자식이 상속했는지 DTYPE을 통해 알 수 있다.

2. 단일 테이블 전략

부모 테이블에 자식 멤버들을 다 넣는다.

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

부모 테이블을 생략하고 자식 테이블에 부모 테이블의 키를 넣는다.

도메인 설계는 다 똑같다.

public @interface Inheritance {
    InheritanceType strategy() default InheritanceType.SINGLE_TABLE;
}

기본적으로는 싱글테이블 전략이다.

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item {

    @Id @GeneratedValue
    private Long id;

    private String name;
    private int price;
}

@Inheritance 를 사용해서 전략을 바꿀 수 있다.
@DiscriminatorColumn 을 넣어주면 부모 테이블에 DTYPE coloumn이 자동생성 되고 자식 테이블을 생성하면 알아서 DTYPE에 자식 클래스 명이 들어간다.

싱글테이블 전략

싱글테이블 전략은 @DiscriminatorColumn이 없어도 hibernate가 알아서 Dtype을 만들어준다. 싱글테이블 전략은 기본 전략이기 때문에 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)을 생략해도 괜찮지만 그래도 이전략을 사용했다고 알아볼 수 있도록 @Inheritance(strategy = InheritanceType.JOINED)을 적도록 하자.

조인 전략

장점

  • 테이블 정규화
  • 외래 키 참조 무결성 제약조건 활용가능
  • 저장공간 효율화

단점

  • 조회시 조인을 많이 사용, 성능 저하
  • 조회 쿼리가 복잡함
  • 데이터 저장시 INSERT SQL 2번 호출

// TABLE_PER_CLASS 전략은 굉장히 비효율적으로 동작하므로 사용하지 말자

그래서 무슨 전략을 사용해야 하나

기본 base: 조인 전략
정말 단순한 경우: 싱글테이블 전략

profile
개발할 수 있어 감사하다

0개의 댓글