cascade = CascadeType.REMOVE :: 영속성전이
orphanRemoval=true :: 고아객체 삭제
ex)
부모 : Parent 자식 : Child
트랜잭션 범위안에서 실행가정
// 단순비교이기 때문에 자세한 설정은 생략합니다.
class Parent { ...//
@OneToMany(cascade = CascadeType.REMOVE)
List< Child > chilren = ...//
class Child { ...//
@ManyToOne
Parent
chilren.remove(0); // delete 쿼리가 나가지 않는다.
//반면에
class Parent { ...//
@OneToMany(orphanRemoval=true)
List< Child > chilren = ...//
class Child { ...//
@ManyToOne
Parent
chilren.remove(0); // delete 쿼리가 나감
//언제나가느냐
//orphanRemoval은 부모 엔티티를 삭제했을 때 남아있는 연관관계의 해당 자식도 삭제된다.
em.remove(parent); // parent 를 부모로 갖고있던 chilren 즉 고아가된 아이들이
// 2명이였다 하면 총 3개의 delete 문이 나감