-
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를 함께 쓰는것이 더 낫다고 생각한다.
'스파르타코딩클럽 > 스프링 팀 프로젝트 - Trello' 카테고리의 다른 글
24/01/03 잼렐로 KPT (1) 2024.01.03 @EntityGraph (0) 2023.12.29 심화프로젝트 프로젝트협업툴 만들기 1일 (0) 2023.12.26