CascadeType.REMOVE vs orphanRemoval = true
얼핏 보면 위 두 개의 옵션은 같아보인다.
사실상 같다고 생각해도 괜찮지만 자세하게 들어가면 차이점이 있다.
CascadeType.REMOVE는 말그대로 부모객체의 "삭제"라는 동작이 자식객체에게 영향을 미치는 것이다.
CascadeType.REMOVE는 그래서 a.setB(null) 을 했을때 기존의 자식객체 B가 삭제되지 않는다.
하지만 orphanRemoval=true 일때는 자식객체에서 부모객체가 존재하는지를 참조로 확인하기때문에
a.setB(null) 을 했을때 기존의 자식객체 B가 삭제된다.
a.setB(null)
- CascadeType.REMOVE : 자식객체 삭제 X
(삭제 동작을 할때 작동하기 때문) - orphanRemoval=true : 자식객체 삭제 O
(자식객체에서 부모객체를 참조로 확인하기 때문)
출처 : korean eagle님 블로그
'Web > JPA' 카테고리의 다른 글
EP12. JPQL (SQL식 JPQL변환) (0) | 2021.02.21 |
---|---|
EP11. JPQL소개, 기본문법 (0) | 2021.02.19 |
EP10. 값 타입 (0) | 2021.02.12 |
EP9. 프록시와 연관관계 관리 (0) | 2021.02.10 |
EP8. 고급 매핑 (0) | 2021.02.09 |