ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 옵션들은 엔티티 간의 관계에서 특정 엔티티의 변경이 연관된 다른 엔티티에 어떻게 영향을 미칠지를 정의하는 데 매우 중요하다. 올바른 캐스케이드 타입을 선택하는 것은 데이터의 일관성과 애플리케이션의 로직 흐름을 유지하는 데 필수적이다.

    참고 자료

Designed by Tistory.