의 우리가 두 개의 엔티티하는 있다고 가정 해 봅시다와 B B가 같은에 대일 관계를 맺고은 다음과 같습니다JPA 또는 데이터베이스 캐스케이드 삭제를 허용해야합니까?
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
을 지금, 나는이 객체를 삭제로 삭제를 계단식으로 원하는 모든 아이들 (B). 두 가지 방법이 있습니다 :
1) JPA가 데이터베이스에서 A 객체를 제거하기 전에 모든 자식을 제거하도록하여 cascade=CascadeType.ALL, orphanRemoval=true
을 OneToMany 주석에 추가하십시오.
2) 클래스를 그대로 두어 데이터베이스가 삭제되도록합니다.
나중 옵션을 사용하는 데 문제가 있습니까? Entity Manager가 이미 삭제 된 객체에 대한 참조를 유지하게합니까? 옵션 2를 선택하는 이유 중 하나는 옵션 A가 제거를 위해 n + 1 개의 SQL 쿼리를 생성한다는 것입니다. 옵션 2는 개체 A가 많은 자식을 포함 할 때 오랜 시간이 걸릴 수 있으며 옵션 2는 단일 SQL 쿼리 만 생성 한 다음 계속 이동합니다 행복하게. 이 문제와 관련하여 "모범 사례"가 있습니까?
내가 찾고있는 것 같습니다! 벤더에 따라 다르긴하지만 그렇게해야 할 것입니다. 감사! –