김영한님의 자바 ORM 표준 JPA 프로그래밍 강의를 참고하여 작성한 글입니다.
####- @Inheritance(strategy = InheritanceType.XXX)
- JOINED : 조인 전략
- SINGLE_TABLE : 다일 테이블 전략
- TABLE_PER_CLASS : 구현 클래스마다 테이블 전략
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
... Getter, Setter
@Entity
@DiscriminatorValue("M")
public class Movie extends Item {
private String director;
private String actor;
... Getter, Setter
단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용
공통 매핑 정보가 필요할 때 사용(id, name, createDate ...)
상속관계 매핑 X
엔티티X, 테이블과 매핑X
부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공
조회, 검색 불가(em.find(BaseEntity) 불가)
직접 생성해서 사용할 일이 없으므로 추상 클래스 권장
속성만 상속하는 매핑
@MappedSuperclass
public abstract class BaseEntity {
@Column(name = "Insert_Member")
private String createBy;
private LocalDateTime createDate;
@Column(name = "Update_Member")
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
... Getter, Setter
요구 사항
- 상품의 종류는 음반, 도서, 영화가 있고 더 확장할 수 있다.
실전에서 이렇게 사용 하는가?
애플리케이션 사용자가 적을경우는 사용 가능.