오봉이와 함께하는 개발 블로그
JPA - 실전 예제 4 - 상속관계 매핑 본문
728x90
요구사항 추가
이전 작업 사항은 아래를 참조하자.
https://5bong2-develop.tistory.com/230
- Item 단독으로 저장될 일은 없다.
- 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있음.
- 모든 데이터는 등록일과 수정일이 필수.
모델
코드
- enum class와 Item을 상속 받는 클래스를 제외한 모든 클래스에 BaseEntity를 상속 받게 해줌.
@MappedSuperclass
@Getter @Setter
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
}
public class Member extends BaseEntity{
/*
......................
*/
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
@Getter @Setter
public abstract class Item extends BaseEntity{ // Item 단독으로 저장될 일 없기 때문에 추상 클래스(abstract)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@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<>();
}
@Entity
@Getter @Setter
public class Album extends Item{
private String artist;
}
@Entity
@Getter @Setter
public class Book extends Item{
private String author;
private String isbn;
}
@Entity
@Getter @Setter
public class Movie extends Item{
private String director;
private String actor;
}
정리
실무에서는 상속관계를 사용할 때도, 안 할 때도 있다.
예를 들면 억단위의 엄청난 데이터가 있을 때는 복잡도 관리 측면에서 상속관계를 사용하는 것은 좋은 선택이 아닐 수도 있다.
서비스 초기에 데이터가 많지 않을 때는 상속관계 매핑을 사용하다가, 관리에 어려움을 겪는 어느 임계점에 도달하면 시스템을 개편하는 방향으로 가도 좋을 것이다.
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90
'BE > JPA' 카테고리의 다른 글
JPA - 즉시 로딩, 지연 로딩 (0) | 2022.06.28 |
---|---|
JPA - 프록시 (0) | 2022.06.28 |
JPA - @Mapped Superclass (0) | 2022.06.28 |
JPA - 상속관계 매핑 (0) | 2022.06.28 |
JPA - 실전 예제 3 - 다양한 연관관계 매핑 (0) | 2022.06.27 |
Comments