EntityManager.clear() はいつ使用すればよいですか? 質問する

EntityManager.clear() はいつ使用すればよいですか? 質問する

カスタム JPA マッパー クラスには次のメソッドがあります。

removeUser()

1. execute 'DELETE' HQL query to remove user
2. call getEntityManager().flush();
3. call getEntityManager().clear();

clear() を正しく理解していれば、すべての永続エンティティがコンテキストから削除されます。-ソース

しかし、私はまたここ

you should define clear architecture- and design guidelines about where a 
clear() can be called. 

clear() をいつ呼び出すかについての明確なガイドラインは何ですか?

ベストアンサー1

記事で説明されています。エンティティ マネージャをクリアすると、関連するキャッシュが空になり、トランザクションの後半で新しいデータベース クエリが強制的に実行されます。トランザクションにバインドされたエンティティ マネージャを使用する場合、エンティティ マネージャをクリアする必要はほとんどありません。クリアする理由は 2 つあります。

  • バッチ処理を行う場合、巨大なキャッシュがメモリを消費し、長いダーティチェックのためにフラッシュ時間が長くなるのを回避するため
  • DML または SQL クエリを実行している場合、エンティティ マネージャ キャッシュを完全にバイパスします (例のように)。この場合、クエリが原因で、キャッシュに保持されている状態はデータベースの内容を反映していないため、この不整合を回避するためにキャッシュをクリアする必要があります。

おすすめ記事