spring boot/JPA - 기본

JPA - 상속관계 매핑

ballde 2021. 11. 8. 23:22

상속관계 매핑 -

  • 3가지 종류가 있음 - 조인전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략
  • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사
  • RDB에는 없음
@Entity
@Inheritance(전략은 고를 수 있음)
public abstract class Item {
	@Id
	@GeneratedValue
	private Long id;
	private String name;
	private int price;
}
@Entity
public class Album extends Item {
	private artist;
}

위의 엔티티로 예시

 

조인전략

조인 전략  -- 정석적인 전략
@Inheritance(strategy = InheritanceType.JOINED)     //이거 없으면 그냥 한 테이블에 다 생김
@DiscriminatorColumn                                // Dtype 생성 - album?movie?
                                                    - @DiscriminationValue를 album에 넣어서 Dtype을 변경 가능

장점: 정규화, 저장 공간 효율화
단점: 조인 많이 사용, 성능 저하

단일 테이블 전략

단일 테이블 전략
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) //단일 테이블 전략
@DiscriminatorColumn                                  //Dtype 생성 꼭 필요

한 테이블에 모두 생성
쿼리가 간단함 - 성능상 좋음
단점: 엔티티가 매핑한 컬럼은 모두 null 허용, 크기가 커지면 성능이 안좋아질 수 있음

구현 테이블 전략

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

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)   //구현 테이블 마다 -- Item테이블이 안생김

데이터를 조회할 경우 쿼리가 매우 복잡함

@MappedSuperclass

  • BaseEntity
  • 추상 클래스 권장
  • 엔티티 X, 테이블과 매핑 X
  • 자식 클래스에 매핑정보만 제공
  • 검색 불가

보통 아래처럼 많이 사용함

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

'spring boot > JPA - 기본' 카테고리의 다른 글

JPA - cascade, orphanRemoval  (0) 2021.11.21
JPA - proxy(프록시)  (0) 2021.11.13
JPA - 연관관계 매핑(2)  (0) 2021.11.08
JPA - 연관관계 매핑  (0) 2021.10.26
jpa - 엔티티 매핑  (0) 2021.10.21