spring으로 구현을 하면서, 엔티티간의 관계를 설정을 해야 할 상황
cascade
cascade 속성은 부모 엔티티에 대한 작업이 자식 엔티티에도 전파되는 방식이다.
예를 들어 특정 작업(삭제, 추가)이 엔티티에 수행될 때, 그에 따라 연관(참조 관계)된 자식 엔티티에도 동일한 작업이 수행된다는 의미이다.
부모 엔티티가 저장(persist)될 때, 자식 엔티티도 함께 저장된다.
예를 들어, Drama 엔티티를 저장할 때 관련된 Actor 엔티티(자식)도 자동으로 저장
선언은 다음과 같이 부모 엔티티에서 선언을 해준다.
public class Drama{
// 코드 생략
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "actor_id") // 외래 키
private Actor actor;
}
PERSIST, MERGE, REMOVE, REFRESH, DETACH 등 모든 엔티티 상태 변경이
자식 엔티티에 적용부모 엔티티에 대한 모든 상태 변화가 자식 엔티티에도 적용되므로, 모든 작업을 함께 진행할 때 유용
선언은 마찬가지로 부모 엔티티에서 선언을 해준다.
public class Drama{
// 코드 생략
@ManyToOne(cascade = CascadeType.All)
@JoinColumn(name = "actor_id") // 외래 키
private Actor actor;
}
자식 엔티티를 독립적으로 관리하고 싶을 때.
즉, 두 관계에 대해 저장을 할 때는 영향을 미치지만, 다른 작업(삭제 등)에서는 자식 엔티티가 영향을 받지 않도록 하고 싶을 때 사용한다.
부모의 상태 변화가 자식에게도 반영되어야 할 때 즉, 모든 상태 변화가 자식 엔티티에 자동으로 적용되기를 원할 때 사용한다.