skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

JPA OrphanRemoval / cascadeType.REMOVE와 비교 #113

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

https://github.com/skarltjr/Memory_Write_Record/issues/112

cascadeType.REMOVE

cascadeType.REMOVE의 경우 부모 엔티티가 삭제되면 자식 엔티티도 삭제된다.
즉 부모가 자식의 삭제 생명 주기를 관리

그런데 이 옵션에서 부모 엔티티가 자식 엔티티와의 관계를 제거해도 자식 엔티티는 삭제되지 않고 그대로 남아있다.
즉 부모 엔티티를 삭제!하면 자식 엔티티도 같이 삭제된다.

알아볼것은
부모엔티티에서 자식 엔티티를 제거(list.remove로)하는 경우인데
영속성전이 옵션 중 REMOVE는 부모의 삭제가 자식에게도 전파되지만
부모에서 자식 연관관계를 끊는것이 전파되는것은 아니다.
따라서 부모에서 list.remove자식해도 자식은 삭제되지 않고 남아있는다.
그리고 부모가 없는 자식이 고아인데

orphanRemoval = true

이 경우도 부모 엔티티가 삭제되면 자식 엔티티도 삭제되는 영속성 전파가 진행된다.
추가로 부모 엔티티가 자식과의 연관관계를 끊으면 자식은 고아라고 판단하여 자식이 사라진다.