AとBの2つのエンティティがあるとします。Bは次のようにAと多対1の関係にあります。
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
ここで、A
オブジェクトを削除し、その削除をすべての子にカスケードしますB
。これを行うには2つの方法があります。
cascade=CascadeType.ALL, orphanRemoval=true
OneToManyアノテーションに追加し、データベースからAオブジェクトを削除する前にJPAがすべての子を削除できるようにします。クラスはそのままにして、データベースに削除をカスケードさせます。
後者のオプションの使用に問題はありますか?エンティティマネージャは、すでに削除されたオブジェクトへの参照を保持しますか?オプション2を選択する理由は、オプション1が削除のためにn + 1個のSQLクエリを生成するためです。これは、オブジェクトAに多数の子が含まれている場合に長時間かかる可能性がありますが、オプション2は単一のSQLクエリのみを生成してから次に進みます。幸せに。これに関する「ベストプラクティス」はありますか?