-
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