본문 바로가기
JPA

[JPA] CASCASDE 옵션 & orphanRemoval

by onejunu 2020. 8. 6.

CASCADE의 옵션으로 

 

ALL

PERSIST

REMOVE ....

 

등이 있는데 ALL에 대해서만 설명하겠다.

 

CACADE는 엔티티가 영속화될때, 해당되는 엔티티도 영속화 할 것인지 옵션으로 정할 수있게한다.

 

@OneToMany 와 @ManyToOne 둘다 cascade 옵션을 가지고 있다. 영속화에 대해서 편리함을 제공한다. 

 

하지만 영속화를 전이할때, 전이대상이 되는 객체가 null 이거나 등 예상치 못한 부작용이 있을 수있다.

 

그래서 나름의 기준을 정하는 것이 좋다.

 

1. 단일 소유여야 한다. 나만 소유하면 되지 다른 객체들도 소유하고 있으면 곤란하다.

2. 생명주기가 같아야 한다. 내가 사라지면 내가 가진 소유물도 사라져야한다. 하지만 사라지지 않아도 되는데 cascade를 쓰면 문제가 있다. (고아객체발생)

 


만약 과일집사장 이라는 객체가 과일들을 소유물로 가지고있다고 하자. 

 

과일집사장이 이제 장사를 안해서 접는다고하면 소유물들도 자연스럽게 사라지는 것이 맞다. 이렇게 소유물들도 자연스럽게 사라지게 해주는 옵션이 orphanRemoval= true  다. 

 


CASCADE 와 orphanRemoval 의 두개의 옵션을 조합해서 사용하면 어떻게 되는가??

 

바로 완전히 해당되는 객체에 의존하는 객체를 만들 수 있다.

 

과일들을 완전히 사장님으로 소속시키는 것이다. 

댓글