고급매핑

타마타마·2022년 7월 21일
0

JPA

목록 보기
3/10

상속 관계 매핑

만약 여러가지 ITEM이 있고 어떤 ITEM을 사용하는지에 따라 변경되는 값이 있다면, 공통으로 사용되는 테이블, 특정 ITEM만 가지고있는 특정 ITEM 테이블 을 생성해준후 사용한다.
EX ) 공통사용 ( ITEM ), 특정 ITEM ( MOVIE )
- ITEM에는 id, name, price 의 값이 들어감.
- Movie에는 director, actor의 값이 들어감.

JOIN 혹은 단일테이블 등의 형식으로 사용할 수 있음.

(부모)

  • @Inheritance(strategy = InheritanceType.???) > 어떤 방식으로 매핑할지 설정
  • @DiscriminatorColumn > DTYPE 생성
    (자식)
  • @DiscriminatorValue("M") > DTYPE 명칭 변경 가능

** DTYPE이란?

  • 특정 ITEM에 MOVIE 뿐만 아니라 BOOK도 있는 경우 ITEM에 어떤 타입인지 작성해줘야 한다.
  • ITEM 테이블
    • id, name, price, dtype으로 구성된다.

@MappedSuperclass

실무에서 테이블 생성시 거의 무조건 들어가는 컬럼이 있다.
createdBy, CreateDate, lastModifiedBy, ModifyDate, Delete, DeleteDate

매번 모든 엔티티에 위의 컬럼들을 만들어 내는건 너무 불필요한 작업같다.
그렇다면 위의 값을 담을 클래스를 만들어 놓고, 엔티티에서 끌어다 쓰면 안될까?

가능하다.

끌어다 쓸 클래스를 추상클래스로 만든다.

BaseEntity.java

@MappedSuperclass
public abstract class BaseEntity {
    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
   .
   .
   .
}
  1. 자식클래스 (extends)
@Entity
public class Member extends BaseEntity{
  .
  .
  .
}

0개의 댓글