JPA実装としてHibernateを使用しています。私のvaadinアプリケーションEntityManager
はリクエストスコープです(蓄積された変更の制御されていないコミットを避けるため)。デタッチされたエンティティをセッションに保存し、リクエストで必要になるたびに再アタッチします (リクエストごとに 1 回、 を使用して確認しますem.contains()
)。エンティティは別のエンティティを参照し、そのエンティティは別のエンティティを参照するため、最終的に、セッション スコープのエンティティをルートとする 3 レベルのカスケード ツリー グラフが作成されます。
これは、完全に新しいノード (合計で 5000 項目以上) を持つ大きな完全に新しいツリーができるまでは正常に機能します - Hibernate はマージ時に新しいノードをそれぞれ見つけよselect
うとします (ログでその試みを確認できます - 存在しない ID による多くの s)。これはバグですか、それとも私が JPA を誤用しているだけですか?
アップデート
@Version
フィールドは使いません。
アップデート*
私のアプリでは、カスケード関係の構造に関係なく、すべてのエンティティ サブツリーを格納するために同じアプローチを使用しているため、さまざまなユース ケースを区別できないため、マージを使用しています。