Spring
CacadeType.REMOVE 와 orphanRemoval = true의 차이
dodop
2022. 2. 24. 09:15
프로젝트 리팩토링을 진행하면서 연관관계의 데이터(1:N 부모 자식)에 옵션을 넣어줄 때
자식 데이터 삭제시 옵션을 주다가 궁금증이 생겨 찾아보게 되었다.
CascadeType.REMOVE(부모 삭제시 자식 삭제) | orphanRemoval = true(고아 객체 삭제) | |
공통점 | (parentRepository.delete(parent)) parent의 삭제시 child도 함께 삭제시키는 것은 동일 | |
차이점 | (parent.getChild().remove()) 부모 엔티티에서 자식 엔티티 관계 삭제시 관계만 끊어질 뿐 부모 부분이 null로 들어간 자식 엔티티를 삭제하진 않는다. |
(parent.getChild().remove()) 부모 엔티티가 자식 엔티티의 관계를 삭제할 경우 남은 자식은 고아로 취급되어 그대로 사라진다. |
주의점 | 삭제하면 안될 상황에서 삭제가 이루어지는 경우를 방지하기 위해서 모두 자식엔티티에 하나의 부모 엔티티가 연관되어 있는 경우에만 사용하도록 주의를 기울이자 |
( 참고한 사이트 )
https://tecoble.techcourse.co.kr/post/2021-08-15-jpa-cascadetype-remove-vs-orphanremoval-true/
JPA CascadeType.REMOVE vs orphanRemoval = true
JPA를 공부하다 보면 바로 이해하기 쉽지 않은 개념들을 몇 개 마주친다. 필자는 연관관계 매핑, 영속성 전이, 고아 객체 등이 특히 어려웠다. 이때 와 가 유독 헷갈렸는데, 직접 학습 테스트를 작
tecoble.techcourse.co.kr
https://modimodi.tistory.com/22
Cascade 이해 및 orphanRemoval=true vs CascadeType.REMOVE
현재 개발하고 있는 프로젝트에서 사용하는 테이블들 간의 관계가 매우 복잡하다. 할 때 마다 까먹고, 정확히 사용하고 있는 건지 확신이 서지 않아 이번 기회에 다시 정리하기로 하였다. 먼저,
modimodi.tistory.com