[JPA] 실전예제 - 상속관계 매핑
📌 목차
- 상속 관계 매핑
- @MappedSuperclass
- 실전 예제 - 4. 상속 관계 매핑
✔ 상속관계 매핑
이번 장에서는 실습 위주로 진행이 됩니다. 💡
상속관계 매핑에 대한 추가적인 내용은 해당 링크를 참고 해주세요. 🤣
✅ 요구사항 추가
- 상품의 종류는 도서, 음반, 영화가 있고 이후 더 확장될 수 있다.
- 모든 데이터는 등록일과 수정일이 필수다.
✅ 도메인 모델
상품(물품) 테이블에 도서, 음반, 영화를 추가하였다.
✅ 도메인 모델 상세
도메인 모델에도 마찬가지로 위 세가지(도서, 음반, 영화)를 추가.
✅ 테이블 설계
테이블은 싱글 테이블로 설계.
⚡ 실습 예제
✅ Item 도메인
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 전략
@DiscriminatorColumn // DTYPE 사용
public abstract class Item {
@Id
@GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name; // 상품명
private int price; // 가격
private int stockQuantity; // 재고 - 수량
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
//.. Getter, Setter 중략
}
Item 엔티티(Entity)에 @Inheritance, @DiscriminatorColumn 어노테이션을 추가한다.
✅ Album, Book, Moive 엔티티 상속 관계 추가
@Entity
public class Album extends Item {
private String artist;
private String etc;
//.. Getter, Setter 중략
}
@Entity
public class Book extends Item {
private String author;
private String isbn;
//.. Getter, Setter 중략
}
@Entity
public class Movie extends Item {
private String director;
private String actor;
//.. Getter, Setter 중략
}
Albumn, Book, Movie는 Item 엔티티를 상속한다. 또한 Item 엔티티는 현재 단일 테이블 전략과 추상 클래스로 선언이 되어있다.
🖨️ 출력 결과
Hibernate:
create table Item (
DTYPE varchar(31) not null,
ITEM_ID bigint not null,
name varchar(255),
price integer not null,
stockQuantity integer not null,
artist varchar(255),
etc varchar(255),
actor varchar(255),
director varchar(255),
author varchar(255),
isbn varchar(255),
primary key (ITEM_ID)
)
단일 테이블 전략을 사용하였기에 다른 테이블(Album, Book, Movie)들은 생성이 되지 않고 Item 테이블에 모든 필드가 초기화된 것을 확인 할 수 있다.
댓글남기기