私はEclipseLink 2.3.3を使用しています。約 100 のエンティティを持つデータ モデルを使用します。注釈を使用して各データベース テーブルにマップされた Java クラスがあります。
実装するユースケースが 2 つあります。1 つは、新しいレコードがシステムに入力され、約 60 ~ 75 のテーブルにヒットすることです。この場合、トップレベルのオブジェクトをマージして、関連するすべてのエンティティにカスケードできるように、マージと永続化をカスケードする必要があります。
もう 1 つのユース ケースは、個々のオブジェクトのコレクションを挿入する必要がある場合です。多くの場合、多数の異なるテーブルのそれぞれから 1 つです。この場合、挿入を制御する必要があるため、カスケード マージは必要ありません。カスケードを有効にしている場合、最初のオブジェクトをマージすると、それらが関連しているかどうか、またはどのように関連しているかに応じて、他のオブジェクトがマージされる場合とマージされない場合があるため、それぞれを明示的にマージしたいと思います。
したがって、本質的に、ある状況ではカスケード マージと永続化が必要ですが、別の状況ではそうではありません。したがって、マップされたクラスにカスケード アノテーションを含める場合は、特定の操作のカスケードを選択的に無効にする必要があります。または、マップされたクラスでカスケードをオフにする場合、特定の操作のカスケードを有効にしたいと考えています。
これまでのところ、特定の操作のカスケードを選択的にオンまたはオフにする方法を見つけていません。CascadePolicy クラスがありますが、それはクエリでのみ使用されるようです。動的エンティティがあり、おそらくそれを使用して、既存のエンティティから動的エンティティを作成し、そのエンティティの関係のカスケード動作をオフにして、それをマージに使用できると考えていましたが、できませんでしたそのための適切な API を見つけます。
だから、私が見落としているどこかにもっと良い答えがあるかどうか疑問に思っていますか? 情報をありがとう。