[JPA] 상속관계매핑, @MappedSuperclass

손효재·2022년 6월 29일

JPA

목록 보기
3/11

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 듣고 정리한 내용입니다.
https://www.inflearn.com/course/ORM-JPA-Basic

상속관계 매핑

관계형 데이터베이스는 상속관계가 없지만, 슈퍼타입 서브타입 관계의 모델링 기법이 객체 상속과 유사하다.

즉, 상속관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입관계를 매핑하는 것이다.
→ 슈퍼타입 서브타입의 논리모델을 실제 물리모델로 구현하는 방법

  • 조인전략 : 각각 테이블로 변환
  • 단일 테이블 전략 : 통합 테이블로 변환
  • 구현 클래스마다 테이블 전략 : 서브타입 테이블로 변환

@Inheritance(strategy=InheritanceType.XXX)

  • JOINED: 조인 전략
  • SINGLE_TABLE: 단일 테이블 전략
  • TABLE_PER_CLASS: 구현 클래스마다 테이블 전략

@DiscriminatorColumn(name=“DTYPE”)
부모 엔티티만 보고 어떤 엔티티를 가르키는지 알 수 있도록 구별하는 DTYPE 컬럼을 추가해준다.
속성을 지정하지 않으면, 기본값으로 엔티티명이 DTYPE으로 들어간다

@DiscriminatorValue(“XXX”)
이 엔티티의 DTYPE에 들어갈 이름을 지정해준다.

📌 조인 전략

엔티티들을 각각 테이블로 변환하는 방법이다.
조인전략을 기본적인 전략으로 가져가고 단순한경우 단일테이블과 고민해보자

장점

  • 테이블이 정규화되어있고, 저장공간이 효율적이다.
  • 외래 키 참조 무결성 제약조건을 활용가능하다.

단점

  • 조회시 조인을 많이 사용하여 조회 쿼리가 복잡하다.
  • 데이터 저장시 INSERT SQL 2번 호출되어 성능이 저하될 수 있다.

📌 단일 테이블(Single Table) 전략

하나의 테이블로 묶는 방법이다. DTYPE이 필수이기때문에 자동으로 생성된다.

Untitled (1)

장점 - 단순한 구조로 조회 쿼리가 단순하고, 조인이 필요없어 성능이 빠르다.

단점

  • 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야한다. (나머지 안들어가는 컬럼들은 null이 된다)
  • 단일테이블에 모든것을 저장하므로 테이블이 커질수있는데, 상황에 따라 조회 성능이 오히려 느려질 수 있다.

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

Item 클래스를 추상클래스로 만들고, 구현 클래스마다 테이블을 만드는 전략이다.
(이 전략은 추천하지 않음)

Untitled (2)

장점

  • 서브 타입을 명확하게 구분해서 처리할 때 효과적이다
  • not null 제약조건 사용 가능

단점

  • 여러 자식 테이블을 함께 조회할 때 성능이 느리다(UNION SQL 필요)
  • 자식 테이블을 통합해서 쿼리하기 어렵다

@MappedSuperclass

테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할이다.
주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다

  • 엔티티가 아니다. 테이블과 매핑될 수 없다.
  • 부모 클래스를 상속받는 자식 클래스에 매핑정보만 제공한다.
  • 해당 클래스타입으로 조회, 검색이 불가능하다.
  • 직접 생성해서 사용할 일이 없으므로 추상 클래스를 권장한다.
    Untitled (3)

0개의 댓글