CascadeType의 종류 및 사용 예시

박우진·2025년 2월 28일

JAVA Spring

목록 보기
2/4

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(고아) 상태

사용 예시

  • 도서관을 삭제할 때, 관련된 책들이 자동으로 삭제
  • 도서관이 없어지면 그 도서관에 속한 모든 책도 삭제

orphanRemoval = true

부모 엔티티가 삭제되면 자식 엔티티도 삭제해주는 옵션

  • 기본값: false
  • 부모 엔티티를 삭제할 시에는 CascadeType.REMOVE와 동일하게 동작
  • 부모 엔티티에서 자식 엔티티를 제외 시에는 자식 엔티티까지 제거

5. CascadeType.REFRESH

부모 엔티티가 새로 고침(refresh)될 때 자식 엔티티도 새로 고침

  • 데이터베이스에서 다시 로드하여 현재 상태를 최신으로 맞추는 작업이 수행
  • 보통 엔티티 매니저에서 refresh() 메서드를 호출할 때 사용

사용 예시

  • 학교 정보를 새로 고침할 때, 학생 정보도 자동으로 새로 고침

6. CascadeType.DETACH

부모 엔티티가 분리(detach)될 때 자식 엔티티도 분리

  • 엔티티가 영속성 컨텍스트에서 분리되면 더 이상 관리되지 않도록 하며, 이를 통해 자식 엔티티도 영속성 컨텍스트에서 분리

사용 예시

  • 회사 객체가 영속성 컨텍스트에서 분리될 때, 그에 속한 직원 객체도 자동으로 분리
  • 회사가 영속성 컨텍스트에서 분리되면 그와 관련된 직원도 더 이상 관리되지 않도록 함

0개의 댓글