orphanRemoval = true
과 cascade = CascadeType.REMOVE
의 차이가 궁금해졌다.
둘 다 연관된 데이터를 삭제한다는 것으로만 알고있었는데,
어떤 차이점이 있는지 확인해보려고 한다.
두가지 모두 공통적인 주의사항으로
삭제하려고 하는 연관된 Entity를 다른 곳에서 참조하고 있는지 아닌지를 꼭 확인하고 사용하자
orphanRemoval=true
로 설정하면, 부모 엔터티에서 자식 엔터티를 제거하면 자식 엔터티가 데이터베이스에서 자동으로 삭제orphanRemoval = true
cascade = CascadeType.REMOVE
그렇다. 어렵다. 무슨 소리인지 이해하기 어려워 GPT에게 예시와 함께 표로 정리해달라고 요청했다.
항목 | orphanRemoval = true | cascade = CascadeType.REMOVE |
---|---|---|
설명 | "고아 객체 제거" 기능을 활성화합니다. | 부모 객체에 대한 삭제 연산을 자식 객체에도 적용합니다. |
작동 방식 | 부모 객체에서 자식 객체의 참조가 제거되면, 자식 객체도 삭제됩니다. | 부모 객체가 삭제되면, 자식 객체도 함께 삭제됩니다. |
적용 시나리오 | 부모 객체에서 특정 자식 객체를 제거할 때 사용합니다. | 부모 객체를 삭제할 때, 관련된 모든 자식 객체도 함께 삭제하려 할 때 사용합니다. |
예시 | 우디가 버즈라이트이어를 손에서 놓으면, 버즈라이트이어가 사라집니다. | 어린이가 우디와 그의 모든 친구들을 상자에 넣으면, 모두 함께 상자에 들어갑니다. |
이 표를 통해 orphanRemoval
과 cascade = CascadeType.REMOVE
설정 사이의 주요 차이점을 더 명확하게 파악할 수 있을 것입니다.
orphanRemoval은 자식객체와의 연관관계가 끊어지면 자동으로 지워지고,
cascade는 연관된 Entity와 관계를 제거했다고 해서 자동으로 해당 Entity가 삭제 되지는 않는다.