Web/JPA

CascadeType.REMOVE vs orphanRemoval = true

CascadeType.REMOVE     vs      orphanRemoval = true


얼핏 보면 위 두 개의 옵션은 같아보인다.

사실상 같다고 생각해도 괜찮지만 자세하게 들어가면 차이점이 있다.

 

CascadeType.REMOVE는 말그대로 부모객체의 "삭제"라는 동작이 자식객체에게 영향을 미치는 것이다.

CascadeType.REMOVE는 그래서 a.setB(null) 을 했을때 기존의 자식객체 B가 삭제되지 않는다.

 

하지만 orphanRemoval=true 일때는 자식객체에서 부모객체가 존재하는지를 참조로 확인하기때문에

a.setB(null) 을 했을때 기존의 자식객체 B가 삭제된다.

 

 

a.setB(null)

  • CascadeType.REMOVE : 자식객체 삭제 X
    (삭제 동작을 할때 작동하기 때문)
  • orphanRemoval=true : 자식객체 삭제 O
    (자식객체에서 부모객체를 참조로 확인하기 때문)

 

 

 

출처 : korean eagle님 블로그

'Web > JPA' 카테고리의 다른 글

EP12. JPQL (SQL식 JPQL변환)  (0) 2021.02.21
EP11. JPQL소개, 기본문법  (0) 2021.02.19
EP10. 값 타입  (0) 2021.02.12
EP9. 프록시와 연관관계 관리  (0) 2021.02.10
EP8. 고급 매핑  (0) 2021.02.09