-
Notifications
You must be signed in to change notification settings - Fork 2
Category 영역에 대한 JPA Migration #71
base: main
Are you sure you want to change the base?
Conversation
- MainCategory : SubCategory = 1:N 관계 고려
@beaniejoy |
좋은 코멘트 감사합니다!~ 코멘트를 보고 Migration 하는데 있어서 서비스 레이어 변경이 많았던 요인들을 생각해봤습니다.
SubCategory subCategory = subCategoryRepository.findById(id)
.orElseThrow(() -> new SubCategoryNotFoundException(id));
//...
subCategory.updateInfo(...); 이렇게 영속성 컨텍스트에서 받아온 Entity 객체의 필드값을 변경해주는 것만으로 커밋 후에 DB와 동기화가 된다는 것이 JPA 특징입니다.
이렇게 update 쿼리를 따로 보내야 한다는 점에서 JPA 방식과 차이가 있습니다. 마지막 3번에 대해서 어떻게 하면 서비스 레이어 수정을 하지 않고 Migration 할 수 있는지에 대해 조금 고민을 해봐야될 것 같습니다. |
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE ,mappedBy = "mainCategory") | ||
private List<SubCategory> subCategoryList; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
subCategoryList가 Lazy로 fetch하면 얻는 이점이 어떤게 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@f-lab-bright
lazy loading은 DB에서 조회해 연관된 엔티티를 한꺼번에 영속성 컨텍스트에 올려놓는 것이 아니라 실제로 subCatgory를 사용할 때 DB조회하기 때문에 불필요한 쿼리 낭비가 없다는 것이 장점 중에 하나입니다.
그런데 MainCategory 조회시 보통 SubCategory도 같이 사용된다는 점에서 EAGER, 즉시로딩으로 하는 것도 좋다고 생각합니다!
(보통 페이지에서 Category 조회시에도 SubCategory까지 같이 조회한다는 것을 고려)
연관관계 설정
@ManyToOne
,@OneToMany
선언 방식만으로 연관관계 설정가능MainCategory delete 기능 적용
CascadeType.REMOVE
해당 부분을 속성으로 지정하지 않으면 부모 엔티티만 삭제되는데 여기서 연관된 SubCategory 데이터가 있으면 예외가 발생할 수 있습니다.성능 상의 이슈