レベル - 1 :このキャッシュのスコープはEntityManager
またはPersistenceContext
(Hibernate には使用されませんが、おそらくセッションになります)。
レベル - 2 :その範囲はEntityManagerFactory
& キャッシュされたオブジェクトは、アプリケーション内の任意のエンティティ マネージャーによって取得できます。
2 つの異なるエンティティ マネージャーを使用しているため、オブジェクトは第 1 レベルのキャッシュからではなく、第 2 レベルのキャッシュから読み込まれます。したがって、そこから古いオブジェクトを取得します。
試すことができsession.setCacheMode(CacheMode.REFRESH)
ます。
それ以外の場合は、クエリ自体にヒントを設定できます。
@NamedQuery(name="queryWithNoCache",
query="SELECT e FROM Entity e",
hints={@QueryHint(name="org.hibernate.cacheMode", value="REFRESH")})
それに応じて、他のモードも試すことができます。
Ehcache ドキュメント :
Session.find は、プライマリ オブジェクトのキャッシュを使用しません。Hibernate は、関連付けられたオブジェクトに対してキャッシュを使用しようとします。ただし、Session.find によってキャッシュが作成されます。Query.find はまったく同じように機能します。これらは、キャッシュ ヒットの可能性が低い場合に使用します。