2023.09.11 - orphanRemoval, cascade Remove

mjjin·2023년 9월 11일
0

orphanRemoval = truecascade = CascadeType.REMOVE의 차이가 궁금해졌다.

둘 다 연관된 데이터를 삭제한다는 것으로만 알고있었는데,

어떤 차이점이 있는지 확인해보려고 한다.

두가지 모두 공통적인 주의사항으로
삭제하려고 하는 연관된 Entity를 다른 곳에서 참조하고 있는지 아닌지를 꼭 확인하고 사용하자

orphanRemoval

  • orphanRemoval=true로 설정하면, 부모 엔터티에서 자식 엔터티를 제거하면 자식 엔터티가 데이터베이스에서 자동으로 삭제
    이 설정은 부모 엔터티와 자식 엔터티 사이의 관계가 끊어졌을 때, "고아"가 된 자식 엔터티를 삭제하는데 사용
    이 설정은 일대일 또는 일대다 관계에서 주로 사용된다.

cascade

  • 부모 엔티티에 대한 특정 연산이 자식 엔티티에도 적용되어야 할 때 사용된다.
  • CascadeType.REMOVE는 부모 엔터티가 삭제될 때 자식 엔터티도 함께 삭제되어야 함을 나타낸다.

차이점

  1. orphanRemoval = true

    • 이 설정은 부모 엔터티와 자식 엔터티 간의 관계가 더욱 밀접할 때 주로 사용
    • 예를 들어, 부모 엔터티가 자식 엔터티 없이는 존재할 수 없거나, 자식 엔터티가 부모 엔터티와의 관계가 끊어지면 더 이상 유효하지 않은 경우에 사용
    • 이 설정은 객체 관계 매핑에서 "고아 객체"를 자동으로 제거하는 기능을 제공하여, 데이터베이스에서 불필요한 데이터를 효과적으로 관리할 수 있게 해준다.
  2. cascade = CascadeType.REMOVE

    • 이 설정은 부모 엔터티와 자식 엔터티 간의 관계가 덜 밀접하거나, 부모 엔터티가 삭제될 때 관련된 모든 자식 엔터티도 함께 삭제되어야 하는 경우에 주로 사용
    • 예를 들어, 부모 엔터티가 삭제되면 자동으로 관련된 모든 자식 엔터티도 삭제되어야 하는 비즈니스 로직을 구현할 때 사용된다.

그렇다. 어렵다. 무슨 소리인지 이해하기 어려워 GPT에게 예시와 함께 표로 정리해달라고 요청했다.

GPT 답변

항목orphanRemoval = truecascade = CascadeType.REMOVE
설명"고아 객체 제거" 기능을 활성화합니다.부모 객체에 대한 삭제 연산을 자식 객체에도 적용합니다.
작동 방식부모 객체에서 자식 객체의 참조가 제거되면, 자식 객체도 삭제됩니다.부모 객체가 삭제되면, 자식 객체도 함께 삭제됩니다.
적용 시나리오부모 객체에서 특정 자식 객체를 제거할 때 사용합니다.부모 객체를 삭제할 때, 관련된 모든 자식 객체도 함께 삭제하려 할 때 사용합니다.
예시우디가 버즈라이트이어를 손에서 놓으면, 버즈라이트이어가 사라집니다.어린이가 우디와 그의 모든 친구들을 상자에 넣으면, 모두 함께 상자에 들어갑니다.

이 표를 통해 orphanRemovalcascade = CascadeType.REMOVE 설정 사이의 주요 차이점을 더 명확하게 파악할 수 있을 것입니다.


orphanRemoval은 자식객체와의 연관관계가 끊어지면 자동으로 지워지고,
cascade는 연관된 Entity와 관계를 제거했다고 해서 자동으로 해당 Entity가 삭제 되지는 않는다.

0개의 댓글