cascade는 영속성 전이라고 하며
부모 엔티티와 자식 엔티티가 연관관계를 맺고 있을 때, 부모 엔티티를 영속성 컨텍스트로 관리할 때 자식 엔티티도 부모 엔티티와 같은 라이플 사이클로 관리 할 지 결정하는 것 이다.
연관관계 매핑과는 아무런 관련이 없으며 부모-자식 관계를 관리할 때 좀 더 편하게 관리 할 수 있는 기능만 제공하는 것.
@OneToMany(cascade = CascadeType.ALL)
영속성 전이는 자식이 하나의 부모에만 종속 되어 있는 경우에만 사용 해야한다.
여러 부모를 가지고 있는 자식이 한 개의 부모를 삭제한다고 같이 삭제 되면 안 된 다는 것 이다. 때문에 영속성 전이는 확실한 이해가 없으면 안쓰는 것도 방법이다.
고아객체는 부모와 연결이 끊어진 자식 객체를 말한다. 이 고아객체는 혼자 남아서 할 수 있는게 없으므로 부모 객체가 지워지면 고아객체를 자동 삭제 할 수 있다.
@OneToMany(orphanRemoval = true)
위 처럼 설정하면 em.remove(부모 엔티티)시 자식 엔티티도 자동 삭제 된다.
고아객체 제거도 영속전 전이 처럼 참조하는 곳이 하나 일 때 사용해야한다. 여러 부모를 가진 자식을 함부로 삭제하면 안된다는 말이다.
때문에 @OneToXXX에서만 사용 가능하다.