Cascade는 부모 엔티티의 영속성 상태 변화를 자식 엔티티에게 그대로 전파하는 기능입니다.
@OneToMany(cascade = CascadeType.XXX) 와 같은 형태로 사용합니다.
cascade 옵션을 정의하지 않으면 아무런 영속성 전이 기능도 적용되지 않습니다.
CascadeType.ALL
설명
모든 Cascade 옵션을 적용합니다. (PERSIST + REMOVE + MERGE + REFRESH + DETACH)
부모와 자식의 생명주기가 완벽하게 일치할 때 사용합니다.
CascadeType.PERSIST
설명:
부모 엔티티를 저장할 때, 연관된 자식 엔티티도 함께 저장됩니다.;
CascadeType.REMOVE
설명
부모 엔티티를 삭제할 때, 연관된 자식 엔티티도 함께 삭제됩니다.
CascadeType.MERGE
설명
준영속(detached) 상태의 부모 엔티티를 병합할 때, 그 변경사항을 자식 엔티티에도 적용합니다.
CascadeType.REFRESH
설명
데이터베이스로부터 부모 엔티티의 상태를 다시 읽어올 때(refresh), 자식 엔티티도 함께 다시 읽어옵니다.
용도
DB에서 발생한 다른 변경사항을 엔티티에 다시 반영하고 싶을 때 사용합니다.
CascadeType.DETACH
설명
부모 엔티티를 준영속 상태(detach)로 만들 때, 자식 엔티티도 함께 준영속 상태로 만듭니다.
용도
특정 엔티티와 그 하위 엔티티들을 영속성 컨텍스트의 관리에서 제외하고 싶을 때 사용합니다.
orphanRemoval = true 옵션은 부모와 자식의 연관관계 자체가 끊어지는 상황에 초점을 맞춥니다. 영속성 전이가 부모의 상태를 전파한다면, 고아 제거 옵션은 부모와 자식의 관계가 끊어지는 것을 감지합니다.
@OneToMany(orphanRemoval = true) 혹은 @OneToMany(orphanRemoval = false)
형태로 사용합니다.
기본값은 false 입니다.