- 영구 전환이란 무엇입니까?
즉, 일관성을 전송합니다. 특정 엔터티가 영구화되면 관련 엔터티도 영구화됩니다.
- 어떤 경우에 사용하나요?
코드로 알아보자!
먼저 다대일 관계에 부모와 자식이 있다고 가정해 봅시다.
@OneToMany(mappedBy = "parent")
private List<Child> childList = new ArrayList<>();
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
parentRepository.save(parent);
//parent클래스에 child add
public void addChild(Child child) {
childList.add(child);
child.setParent(this);
}
코드를 보면 child1, child2 및 parent 두 개체를 만들고 데이터베이스에 부모만 저장합니다. 결과는 어떻게 될까요?
물론 예상대로 부모만 저장됩니다.

쿼리만 보면 부모만 저장되어 있는 것을 알 수 있습니다.
그렇게 생각할 수 있습니다.
부모를 저장할 때 child1과 child2를 함께 저장하고 싶은데 방법이 없을까요?
이렇게 하면 계단식 매핑 옵션을 사용할 수 있습니다.
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> childList = new ArrayList<>();
위와 같이 캐스케이드 옵션을 설정하십시오.
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
parentRepository.save(parent);
//parent클래스에 child add
public void addChild(Child child) {
childList.add(child);
child.setParent(this);
}
코드를 실행할 때


삽입 쿼리가 세 개의 부모, child1 및 child2를 반환하는 것을 볼 수 있습니다.
- 고려해야 할 사항
- 지속성 재정의는 매핑 연결과 관련이 없습니다.
- 엔터티를 유지할 때 연결된 엔터티도 유지할 수 있는 가능성을 제공합니다.
- 반드시 일대다 관계에서 사용되는 것은 아닙니다. 자녀가 부모에 의해서만 관리되는 경우에만 사용하십시오. 여기 저기 다른 상위 클래스를 사용하는 경우 X를 사용하십시오.
- CASCADE 유형
- ALL: 모두에게 적용
- 머무르다: 진행 중
- 제거: 삭제
- 병합: 병합
- 업데이트
- 분리하다
추가할 고아 개체…
