CascadeType 이란?
- CascadeType은
JPA(Java Persistence API)에서 엔티티 관계를 정의할 때, 연관된 엔티티에 대한 특정 작업을 어떻게 처리할지 결정하는 속성
- 예를 들어,
부모 엔티티가 저장, 삭제, 수정되는 작업을 자식 엔티티에 자동으로 적용 가능
CascadeType의 종류
1. CascadeType.ALL
부모 엔티티에 대해 수행하는 모든 작업이 자식 엔티티에 전파
- 저장, 삭제, 수정, 병합 등의 작업이 모두 자동으로
자식 엔티티에 적용
2. CascadeType.PERSIST
부모 엔티티가 저장(persist)될 때만 자식 엔티티도 저장
부모 엔티티를 저장할 때만 자식 엔티티가 자동으로 저장되며, 부모의 다른 작업(예: 삭제, 수정 등)은 자식에 영향 X
사용 예시
- 고객을 저장할 때만 계약이 자동으로 저장
- 고객이 삭제되거나 수정되어도 계약은 영향 X
3. CascadeType.MERGE
부모 엔티티가 병합(merge)될 때 자식 엔티티도 병합
- 주로 영속성 컨텍스트에 있던 엔티티가 수정되어 병합될 때 사용되며, persist와는 달리 업데이트된 엔티티를
자식 엔티티에도 적용
사용 예시
- 프로젝트를 수정할 때, 관련된 작업들도 자동으로 병합
- 프로젝트에서 작업이 변경되면 변경된 작업이 자동으로 업데이트
4. CascadeType.REMOVE
부모 엔티티가 삭제(remove)될 때 자식 엔티티도 자동으로 삭제
부모 엔티티를 삭제할 때 연관된 자식 엔티티도 삭제되어야 할 때 사용
- 부모 엔티티에서 자식 엔티티를 제외 시 자식 엔티티가
orphanRemoval(고아) 상태
사용 예시
- 도서관을 삭제할 때, 관련된 책들이 자동으로 삭제
- 도서관이 없어지면 그 도서관에 속한 모든 책도 삭제
부모 엔티티가 삭제되면 자식 엔티티도 삭제해주는 옵션
- 기본값:
false
- 부모 엔티티를 삭제할 시에는
CascadeType.REMOVE와 동일하게 동작
- 부모 엔티티에서 자식 엔티티를 제외 시에는 자식 엔티티까지 제거
5. CascadeType.REFRESH
부모 엔티티가 새로 고침(refresh)될 때 자식 엔티티도 새로 고침
- 데이터베이스에서 다시 로드하여 현재 상태를 최신으로 맞추는 작업이 수행
- 보통 엔티티 매니저에서 refresh() 메서드를 호출할 때 사용
사용 예시
- 학교 정보를 새로 고침할 때, 학생 정보도 자동으로 새로 고침
6. CascadeType.DETACH
부모 엔티티가 분리(detach)될 때 자식 엔티티도 분리
- 엔티티가 영속성 컨텍스트에서 분리되면 더 이상 관리되지 않도록 하며, 이를 통해 자식 엔티티도 영속성 컨텍스트에서 분리
사용 예시
- 회사 객체가 영속성 컨텍스트에서 분리될 때, 그에 속한 직원 객체도 자동으로 분리
- 회사가 영속성 컨텍스트에서 분리되면 그와 관련된 직원도 더 이상 관리되지 않도록 함