고급 매핑

데일리·2022년 3월 28일
0

JPA 기초

목록 보기
6/10

1. 상속관계 매핑

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

2. 구현 전략

  • 조인 전략(기본적으로 사용되는 전략)
    • 장점: 정규화가 되어있고 제약조건을 맞출 수 있다.
    • 단점: 조회시 조인을 많이 사용 -> 성능 저하
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DIS_TYPE") >> 부모 테이블에 자식 테이블을 구분하는 속성 명
public abstract class Item {}

----------------------------------------------------------
@Entity
@DiscriminatorValue("M") >> 부모 테이블에 저장되는 도메인 값
public class Movie extends Item {}
  • 단일 테이블 전략
    • 성능이 좋다
    • 자식 객체를 구분하기 위해 DiscriminateColumns 애너테이션 없이도 생성 가능
    • 장점: 성능이 좋다
    • 단점
      • 다른 상관없는 객체에 NULL이 허용된다.
        • 단일 테이블에 모든 것을 저장하므로 오히려 조회 성능이 안나올 수 있다.
```java
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DIS_TYPE") >> 부모 테이블에 자식 테이블을 구분하는 속성 명
public abstract class Item {}

----------------------------------------------------------
@Entity
@DiscriminatorValue("M") >> 부모 테이블에 저장되는 도메인 값
public class Movie extends Item {}
  • 구현 클래스마다 테이블 전략
    - 웬만해서는 사용 X
    • 장점
      • 서브 타입을 명확히 구분해 처리 할 때 효과 적
        • NotNull 가능
    • 단점
      • 조회 할 때 모든 테이블을 다 돌아보는 비효율적인 부분 발생
        • 변경이 매우 힘들다

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {}

----------------------------------------------------------
@Entity
public class Movie extends Item {}

3. MappedSuperClass - 매핑 정보 상속

  • 공통 매핑 정보가 필요할 때 사용 ex) Id, Name
  • 상속 관계 매핑 x
  • 엔티티 x
  • 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공
    • em.find(BaseEntity.class, id) >> 불가
  • 직접 생성해서 사용할 일이 없으므로 abstract로 사용을 추천
  • 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 속성일 때 사용
@MappedSuperclass
public class BaseEntity {

    private String createBy;
    private LocalDateTime createDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
}
----------------------------------------------------------
public class Member extends BaseEntity{}
profile
하루에 한편 씩 읽기 좋은 테크 로그

0개의 댓글