-
CacadeType.REMOVE 와 orphanRemoval = true의 차이Spring 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/
https://modimodi.tistory.com/22
'Spring' 카테고리의 다른 글
ExistsBy쿼리를 직접 작성하기 (0) 2022.03.04 Validation failed for query for method public abstract 오류 발생시 (JPA) (0) 2022.03.04 a collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance 발생 시 (0) 2022.02.16 @ParameterizedTest사용할 때 java.lang.NoSuchMethodException 발생 시 (0) 2022.02.16 existsBy, countBy (JPA) (0) 2022.02.13