
영속성 전이
영속성 전이(CASCADE)의 PERSIST 옵션
-영속 상태의 Entity에서 수행되는 작업들이 연관된 Entity까지 전파되는 상황을 뜻한다.
-영속성 전이를 적용하여 해당 Entity를 저장할 때 연관된 Entity까지 자동으로 저장하기 위해서는 자동으로 저장하려고 하는 연관된 Entity에 추가한 연관관계 애너테이션에 CASCADE의 PERSIST 옵션을 설정하면된다.
-M 설정
@OneToMany(mappedBy = "상대 Entity의 필드명", cascade = CascadeType.PERSIST)
-> @OneToMany 애너테이션에 영속성 전이를 적용해서 해당 N Entity도 자동으로 저장될 수 있도록 만든다.
CASCADE : REMOVE
-삭제 관련한 영속성 전이(CASCADE)의 REMOVE 옵션을 제공
-cascade = {CascadeType. PERSIST , CascadeType. REMOVE } 이렇게 중복으로 옵션을 설정할 수도 있다.
고아 Entity 삭제
orphanRemoval
-CASCADE의 REMOVE 옵션을 적용하면 해당 Entity 객체를 삭제 했을 때 연관된 Entity 객체들을 자동으로 삭제할 수 있었다.
-> 하지만 REMOVE 옵션 같은 경우 연관된 Entity와 관계를 제거했다고 해서 자동으로 해당 Entity가 삭제 되지는 않습니다.
-@OneToMany(mappedBy = "상대 Entity의 필드명", cascade = CascadeType.PERSIST, orphanRemoval = true) Delete SQL이 수행되어 같이 삭제 된 것을 확인 할 수 있다.
주의 사항
-orphanRemoval이나 REMOVE 옵션을 사용할 때 삭제하려고 하는 연관된 Entity를 다른 곳에서 참조하고 있는지 아닌지를 꼭 확인해야한다.
-> A와 B에 참조되고 있던 C를 B를 삭제하면서 같이 삭제하게 되면 A는 참조하고 있던 C가 사라졌기 때문에 문제가 발생할 수 있다.
-orphanRemoval 같은 경우 @ManyToOne 같은 애너테이션에서는 사용할 수 없다.