특정 엔티티를 영속 상태로 만들 때 연관관계에 놓여있는 엔티티도 영속 상태로 만들고자 할 때 사용하는 기능
영속 상태 : 영속성 컨텍스트가 관리하는 Entity
@Entity
public class Team {
@OneToMany(mappedBy = "user_id", cascade = CascadeType.PERSIST)
private List<User> userList = new ArrayList<>();
CascadeType.PERSIST 옵션을 통해 team이 영속 상태가 되면 user도 영속 상태가 된다.
CascadeType.DELETE 옵션일 때, team 삭제하면 user도 삭제된다.
public enum CascadeType {
ALL,
PERSIST,
MERGE,
REMOVE,
REFRESH,
DETACH
}
cascade = { CascadeType.PERSIST, CascadeType.REMOVE }
처럼 같이 사용할 수도 있다.
추가로 CascadeType.PERSIST, CascadeType.REMOVE는 em.persist(), em.remove()를 실행할 때 바로 전이가 발생하지 않고 플러시를 호출할 때 전이가 발생한다.
부모 엔티티(tean)와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능.
부모 엔티티에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제된다.
@Entity
public class Parent {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<>();
}
로 해놓고,
parent.getChildren().remove(0);
코드가 수행되면
DELETE FROM CHILD WHERE ID = ?
를 통해 첫 번째 자식이 제거된다.
결론적으로 컬렉션에서 엔티티를 제거하면 DB의 데이터도 삭제된다.