<aside> ❗
즉시로딩, 지연로딩, 연관관계 설정과 전혀 관계가 없음
연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용
@OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST)
@Entity
public class Parent {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
// parent를 persist()할 때, 컬렉션 안에 있는 모든 얘들을 persist() 할거야
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> childList = new ArrayList<>();
public void addChild(Child child) {
childList.add(child);
child.setParent(this);
}
}
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);
// parent만 persist() 해줬는데 childe 둘 모두 persist()됨
영속성 전이는 연관관계를 매핑하는 것과 아무 관련 없음
!!!!!엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공할 뿐
</aside><aside> ❗
ALL, PERSIST 주로 사용
ALL - 모두 적용
PERSIST - 영속
- 저장할 때만REMOVE - 삭제
하나의 부모가 관리할 때는 의미가 있음
라이프싸이클이 동일할 때
단일 소유할 때
여러 곳이나 다른 엔티티에서 관리할 경우 사용하면 안 됨
→ 운영하기 어려워짐
</aside><aside> ❗
orphanRemoval = true
// 자식 엔티티를 컬렉션에서 제거 -> 해당 자식 튜플에 대한 DELETE 쿼리가 나감
Parent parent 1 = em.find(Parent.class, id);
parent1.getChildren().remove(0);
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);
em.flush();
em.clear();
Parent findParent = em.find(Parent.class, parent.getId());
findParent.getChildList().remove(0);
</aside>
<aside> ❗
참조하는 곳이 하나일 때, 사용해야 함 !!
특정 엔티티가 개인 소유할 때 사용
[참고]
개념적으로 부모를 제거하면 자식은 고아가 된다.
따라서 고아 객체 제거 기능을 활성화 하면
부모를 제거할 때 자식도 함께 제거된다.
이것은 CascadeType.REMOVE
처럼 동작한다.
CascadeType.ALL도 동일 (parent 지우면 child 모두 지워짐)
</aside><aside> ❗
CascadeType.ALL + orphanRemovel = true
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> childList = new ArrayList<>();
두 옵션을 모두 활성화
하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음
em.persist(parent); // parent를 생성하면 컬렉션에 들어간 child가 자동으로 DB 저장됨
parent.getChildeList().remove(0); // 자동으로 DB에서 제거됨
Aggregate Root 개념을 구현
할 때 유용
<aside> ❗
모든 연관관계를 지연 로딩
으로로딩이므로 지연로딩으로 변경 권장
</aside>