ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CascadeType.ALL 과 REMOVE의 차이
    스파르타코딩클럽/스프링 팀 프로젝트 - Trello 2023. 12. 27. 15:15

     

    보드를 구현하면서

     

    보드를 삭제할 때  아래에 종속된 카테고리와 댓글을 같이 정리해야하므로

     

    엔티티 애너테이션에 cascade를 붙여두었다.

     

    하지만 CascadeType을 정할때   REMOVE를 사용할지 ALL을 사용할지 판단이 쉽지 않았다.

     

    뭘 고를까

     

     

     


     

     

     

    먼저  Cascade 란?

    JPA에서 엔티티의 상태변화를 관련 엔티티에 전파하는 옵션이다.

     

    SQL에서는 외래키 제약조건으로 쓰이는데,  참조 무결성을 유지하기 위해 부모 테이블에 변경사항이 생길때

    자식 테이블에 자동으로 동일한 작업을 수행하도록 할 때 사용된다.

     

     

     


     

     

     

    스프링에서 CascadeType 종류엔 뭐가 있나

    CascadeType.ALL
    // 모든 cascade 옵션을 적용
    
    CascadeType.PERSIST
    // 부모엔티티 저장 시 연관된 자식 엔티티도 함께 저장
    
    CascadeType.MERGE
    // 부모 엔티티 병합 시 연관된 자식 엔티티도 함께 병합
    
    CascadeType.REMOVE
    // 부모 엔티티 삭제 시 연관된 자식 엔티티도 함께 삭제
    
    CascadeType.REFRESH
    // 부모 엔티티 새로고침 시 연관된 자식 엔티티도 함께 새로고침
    
    CascadeType.DETACH
    // 부모 엔티티를 영속성 컨텍스트에서 분리할때 연관된 자식 엔티티도 함께 분리

     

     

     


     

     

    결론

    고아엔티티 삭제를 위한 orphanRemoval = true를 적용했으며,

    보드와 카테고리, 댓글은 삭제할 때에만 Cascade를 적용하기 때문에

    CascadeType.REMOVE를 함께 쓰는것이 더 낫다고 생각한다.

Designed by Tistory.