JPA 상속관계 매핑과 고급매핑

배태현·2021년 5월 18일
0

JPA

목록 보기
4/7
post-thumbnail

시작하기 앞서 저의 글에대한 피드백이나 지적은 언제나 환영입니다 😊

상속관계 매핑

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

슈퍼타입 서브타입 논리 모델을 실제 물리모델로 구현하는 법

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

@주요어노테이션

  1. @Inheritance(strategy=InheritanceType.XXX)
  • JOINED : 조인전략
  • SINGLE_TABLE : 단일 테이블 전략
  • TABLE_PER_CLASS : 구현 클래스마다 테이블 전략
  1. @DiscriminatorColumn(name=“DTYPE”)
  • default: DTYPE DTYPE이라는 Column이 super class의 table에 생기고,
    DTYPE의 값은 sub class의 이름으로 지정된다.
  • SingleTable 전략에서 없어도 DTYPE 이생성되기도 하는데, 그래도 운영상 써주자
  • 이 어노테이션은 상위 클래스(Item)에서 명시된다. 데이터베이스의 상위 테이블(Item 테이블)에게 구분자 역할을 DTYPE 칼럼을 넣어준다. 애노테이션의 name 속성으로 컬럼명을 바꿔줄 수 있다(이름속성으로 쓰자).
  1. @DiscriminatorValue(“XXX”)
  • 이 어노테이션은 하위 클래스(ALBUM, MOVIE, BOOK)에서 사용된다. 상위 테이블(ITEM 테이블)을 조회할때 DTYPE 칼럼에 사용되는 value를 설정해주는 기능이다. 애노테이션을 사용하지 않을 경우 기본 Default 값인 Entity 이름으로 value값이 채워지게 된다.
  • default: classname

조인전략

Item 엔티티는 abstract(추상)클래스로 만든다! 자식 엔티티 클래스에서 Item엔티티를 상속받는다.

장점

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

단점

  • 조회시 조인을 많이 사용(성능저하)
  • 조회 쿼리가 복잡하다
  • 데이터 저장시 insert쿼리문 2번 호출

단일 테이블 전략

장점

  • 조인이 필요없으므로 일반적으로 조회 성능이 빠르다
  • 조회 쿼리가 단순하다

단점

  • 자식 엔티티가 매핑한 컬럼은 모두 null허용
  • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있음 (상황에 따라 조회성능이 오히려 느려질 수 있음)

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


이 전략은 데이터베이스 설계자와 개발자 둘다 추천하지 않는 방법이다 (알아만두자)

장점

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

단점

  • 여러 자식 테이블을 함께 조회할 때 성능이 느림 (UNION SQL 필요)
  • 자식테이블을 통합해서 쿼리가 어려움

@MappedSuperclass

  • 공통매핑정보가 필요할 때 사용한다(id, name)

  • 상속관계 매핑X

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

  • 부모 클래스를 상속받는 자식클래스에 매핑정보만 제공

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

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

정리

  • 테이블과 관계없고, 단순이 엔티티가 공통으로 사용하는 매핑정보를 모으는 역할
  • 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용
  • 참고 : @Entity클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속가능

결론

조인전략 or 단일 테이블 전략중에 고민해보고 결정하자.
기본적으로 가장 객체지향적인 조인 전략을 선택하고
테이블 컬럼 수가 굉장히 적고 가볍다면 단일테이블 전략을 선택해보는 것도 나쁘지 않은 선택인 것 같다.

profile
일상의 불편함을 기술로 해결 할 방법을 고안합니다.

0개의 댓글