0

2 つのボタンを含むページがあり、それぞれをクリックすると、実際には、entityManager が注入された 2 つの異なるクラスのメソッドが呼び出されます。

クラス 1 でメソッド save() が呼び出されると、エンティティが最新の値で更新されます。メソッドが戻る前に、entityManager.flush()変更がデータベースにフラッシュされるように呼び出します。

その直後に、クラス 2 のメソッド Advance() を呼び出す別のボタンをクリックし、 を使用して同じエンティティをロードするとentityManger.find(entity.class, Long.valueOf(entityId))、前のメソッド呼び出しで更新されたフィールドが と表示されますnull

これが起こらないようにするために構成を行う必要がありますか、または更新されたデータベースでフラッシュ操作後の呼び出しが機能することを確認できるように、これら 2 つのクラス間でエンティティ マネージャーを共有するにはどうすればよいですか。

4

1 に答える 1

1

トランザクションがコミットされます。それは問題ではありません。

EntityManager.find()メソッドの Java ドキュメントから:

エンティティ インスタンスが永続化コンテキストに含まれている場合は、そこから返されます。

つまり、エンティティマネージャーに既に存在する場合、検索はDBからオブジェクトをフェッチしません。

エンティティを更新するには、単にrefresh(entity)を呼び出します:

MyEntity myEntity = entityManger.find(MyEntity.class, Long.valueOf(entityId));
entityManger.refresh(myEntity);
于 2013-09-13T11:34:26.060 に答える