CascadeType.REMOVE와 orphanRemoval=true의 차이

myminimin·2023년 10월 12일
0

CascadeType.REMOVE

  • 정의 : CascadeType.REMOVE는 부모 엔티티가 삭제될 때 연관된 자식 엔티티도 함께 삭제.
  • 동작 : 부모 엔티티를 삭제하면, 연관된 자식 엔티티도 함께 삭제
  • 예시 : PostComment와 같이 포스트가 삭제되면 관련 댓글도 함께 삭제되어야 하는 상황에서 사용
    (부모와 자식 간의 생명주기가 동일하거나, 부모가 없을 때 자식이 존재할 이유가 없는 경우)

orphanRemoval=true

  • 정의 : 부모 엔티티와의 연관 관계가 끊어진 자식 엔티티를 자동으로 삭제하는 설정
  • 동작 : 부모 엔티티의 컬렉션에서 자식 엔티티를 제거하면, 해당 자식 엔티티는 데이터베이스에서도 삭제
  • 예시 : OrderOrderItem의 관계에서 특정 주문 항목을 제거하면, 해당 주문 항목이 데이터베이스에서도 삭제되어야 하는 경우에 사용
    (부모-자식 관계에서 컬렉션의 특정 항목을 제거할 필요가 있을 때)

차이점 요약:
CascadeType.REMOVE: 부모 엔티티가 삭제될 때, 연관된 자식 엔티티도 함께 삭제된다.
orphanRemoval=true: 부모 엔티티의 컬렉션에서 자식 엔티티를 제거하면, 해당 자식 엔티티는 데이터베이스에서도 삭제된다.

두 옵션 모두 자식 엔티티를 삭제하는 결과를 가져오지만, 트리거 되는 상황과 동작 방식이 다르다. 따라서 상황에 따라 적절한 옵션을 선택하여 사용해야 한다!

0개의 댓글