[JPA] orphanRemoval, CasecaseType.REMOVE

2024. 10. 2. 22:45·Spring Framework/JPA
반응형

orphanRemoval과 casecade는 @OneToMany에서 삭제 동작을 제어하는 두 가지 옵션이다. orphanRemoval=true, CascadeType.REMOVE 두 옵션 모두 부모-자식 관계에서 자식 엔티티를 삭제하는 설정이지만 차이가 있다.

casecade

casecade는 부모 엔티티의 상태 변화가 자식 엔티티에 전파되도록 설정하는 옵션으로 부모 엔티티가 생성/수정/삭제 될 때 자식 엔티티에도 부모 엔티티를 따라 데이터베이스에 생성/수정/삭제되록 설정한다. 이 옵션에 지정할 수 있는 다양한 CascadeType이 있다.

  • PERSIST: 비영속 상태의 부모 엔티티를 영속상태로 변경할 때 자식 엔티티도 영속 상태로 변경
  • MERGE: 준영속 상태의 부모 엔티티를 영속상태로 변경할 때 자식 엔티티도 준영속 상태로 변경
  • REMOVE: 영속 상태의 부모 엔티티를 삭제 상태로 변경할 때 자식 엔티티까지 삭제 상태로 변경
  • REFRESH: 부모 엔티티를 데이터베이스에서 다시 조회할 때 자식 엔티티도 다시 갱신
  • DETACH: 영속 상태의 부모 엔티티를 준영속 상태로 변경할 때 자식 엔티티도 준영속 상태로 변경
  • ALL: 위 모든 동작 적용

CascadeType.REMOVE를 지정하면 부모 엔티티가 삭제될 때 연관된 자식 엔티티도 함께 삭제된다.

orphanRemoval

orphanRemoval은 고아 객체를 어떻게 처리할지 설정하는 옵션이다. 고아 객체란 부모 엔티티 객체와 연관 관계가 끊어진 자식 엔티티 객체를 말한다. 이 옵션을 true로 설정하면 연관 관계가 끊어진 자식 객체를 데이터베이스에 동기화할 때 삭제한다.

차이점

부모-자식 연관 관계에서 삭제가 수행되기 때문에 혼동이 왔었다. 부모-자식 관점에서 보니 차이점을 명확히 알 수 있었다.

  • cascade는 부모 엔티티의 변경을 자식에게 전파하는 옵션이다. CascadeType.REMOVE을 설정하면 부모 엔티티가 삭제될 때 자식 엔티티도 삭제된다.
  • orphanRemoval은 자식 부모와 자식 간의 관계가 끊어질 때 자식 엔티티를 삭제한다.
반응형
저작자표시 비영리 변경금지 (새창열림)
'Spring Framework/JPA' 카테고리의 다른 글
  • [JPA] 5개 데이터가 4+1개 쿼리로 나누어지다.
  • [JPA] Batch Insert
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (52)
        • Java (12)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (3)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블루프린트
    C
    redis
    JS
    클래스
    딥러닝
    memcached
    Python
    자바
    php
    JavaScript
    select
    mscoco
    Unreal
    프로그래머스
    게임 개발
    NUXT
    PS
    C++
    map
    알고리즘
    Unreal Engine
    CPP
    파이썬
    pytorch
    FPS
    언리얼엔진4
    게임
    MySQL
    웹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[JPA] orphanRemoval, CasecaseType.REMOVE
상단으로

티스토리툴바