HibernateでJBossを実行していて、この問題が発生しています。
セッションBeanがEntityManagerを使用してエンティティを検索する場合、そのエンティティはEntityManagerのキャッシュにすでに存在している可能性があり、その状態はすでに古くなっている可能性があります。コードがそのようなエンティティを使用して決定を下す場合、バグを引き起こす可能性のある誤った決定を行う可能性があります。
これが例です。
HTTPリクエスト1.セッションBeanはエンティティインスタンスを作成し、フィールド「A」を値1に設定して保存します。永続化されたエンティティはID=4を取得します。
HTTPリクエスト2。セッションBeanはID=4のエンティティを検索し、そのフィールド「A」を値2に設定して保存します。
HTTPリクエスト3.セッションBeanは、ID = 4のエンティティを検索し、そのフィールド「A」をチェックします。値が1の場合は1つのことを行い、2の場合は別のことを行います。
リクエスト3のEMがリクエスト1と同じである場合、望ましくない動作が発生します。私はこれをテストし、約を得ました。失敗の10%のケース。
だから問題は-これを回避する方法は?エンティティが最新であることを確認する必要があるたびにem.refresh()またはem.clear()を呼び出すことは、リソースの浪費のようです。