-
JPA : 영속성 전이(Cascade)JPA 2024. 5. 2. 21:42
JPA에서 영속성 전이(Cascade)는 엔티티의 상태 변화를 관련된 엔티티들에게도 전파하는 메커니즘을 말한다. 즉, 한 엔티티에 대한 특정 연산(예: 저장, 삭제, 병합)이 그 엔티티와 관련된 다른 엔티티들에게도 적용되도록 할 수 있다. 이는 엔티티 간의 관계를 정의할 때 설정할 수 있는 옵션이며, 코드를 보다 깔끔하게 유지하고 데이터 일관성을 보장하는 데 도움이 된다.
CascadeType 종류
JPA에서는 다음과 같은 종류의
CascadeType
옵션이 있다.1.
CascadeType.ALL
- 설명:
ALL
옵션은 모든 캐스케이드 타입(PERSIST
,MERGE
,REMOVE
,DETACH
,REFRESH
)을 적용한다.- 모든 영속성 관련 연산이 연관된 모든 엔티티에도 적용된다.
- 적용 사례: 엔티티와 연관된 모든 엔티티가 항상 함께 처리되어야 하는 경우에 적합하다.
2.
CascadeType.PERSIST
- 설명:
PERSIST
옵션은 부모 엔티티를 저장할 때 연관된 자식 엔티티들도 함께 저장된다.EntityManager.persist()
메소드 호출 시 연관된 모든 엔티티에도persist
가 적용된다.
- 적용 사례: 새로운 주문과 그 주문의 상세 정보(주문 항목)를 동시에 저장할 때 유용하다.
3.
CascadeType.MERGE
- 설명:
MERGE
옵션은 부모 엔티티의 상태를 병합할 때 연관된 자식 엔티티들도 함께 병합된다.EntityManager.merge()
메소드 호출 시 연관된 모든 엔티티에도merge
가 적용된다.
- 적용 사례: 분리된(detached) 상태의 엔티티를 현재 세션에 다시 연결할 때 사용된다.
4.
CascadeType.REMOVE
- 설명:
REMOVE
옵션은 엔티티를 삭제할 때 연관된 자식 엔티티들도 함께 삭제된다.EntityManager.remove()
메소드 호출 시 연관된 모든 엔티티에도remove
가 적용된다.
- 적용 사례: 회원을 삭제할 때 해당 회원의 프로필 사진, 주문 기록 등도 함께 삭제되어야 하는 경우에 적합하다.
5.
CascadeType.DETACH
- 설명:
DETACH
옵션은 엔티티가 영속성 컨텍스트에서 분리될 때 연관된 자식 엔티티들도 함께 분리된다.EntityManager.detach()
메소드 호출 시 연관된 모든 엔티티에도detach
가 적용된다.
- 적용 사례: 특정 엔티티를 캐싱할 때 그 엔티티와 연관된 엔티티들을 세션에서 분리해야 할 때 유용하다.
6.
CascadeType.REFRESH
- 설명:
REFRESH
옵션은 엔티티의 상태를 데이터베이스의 상태로 갱신할 때 연관된 자식 엔티티들도 함께 갱신된다.EntityManager.refresh()
메소드 호출 시 연관된 모든 엔티티에도refresh
가 적용된다.
- 적용 사례: 데이터베이스에서 최신 데이터를 가져와야 할 때, 예를 들어 다른 사용자나 프로세스에 의해 데이터가 변경된 경우에 사용된다.
이러한
CascadeType
옵션들은 엔티티 간의 관계에서 특정 엔티티의 변경이 연관된 다른 엔티티에 어떻게 영향을 미칠지를 정의하는 데 매우 중요하다. 올바른 캐스케이드 타입을 선택하는 것은 데이터의 일관성과 애플리케이션의 로직 흐름을 유지하는 데 필수적이다.참고 자료
'JPA' 카테고리의 다른 글
JPA Entity에 public or protected no-arg constructor가 필수인 이유 (1) 2024.10.09 JPA 연관 관계의 주인과 소유 측: 개념 및 예제 (0) 2024.05.04 JPA 연관 관계 어노테이션의 속성 분석 (0) 2024.05.04 Spring Data JPA 가이드 모음 (0) 2024.05.02 JPA에서 신규 엔티티 처리: EntityManager.persist()와 JpaRepository.save()의 차이점 파악하기 (0) 2024.04.30 - 설명: