2011-12-03 24 views
4

私のアプリケーションでは、ユーザーがシステムにログインすると、システムはDBから設定を読み込み、ユーザーのセッションに保存します。システムは、EclipseLink(JPA 2.0)を使用してJPAクエリーによってこのアクションを実行しています。EclipseLinkキャッシュを無効にする

DBの設定を変更して再度サインインすると、クエリは以前の結果を返します。これは、EclipseLinkが結果をキャッシュしているようです。

私はそれが動作しない この動作を修正するためにこれを使用しますがき

query.setHint(QueryHints.cache_usage,cacheUsage.no_cache); 

答えて

6

クエリヒントを設定したい場合は、docsがやってお勧めします。

query.setHint("javax.persistence.cache.storeMode", "REFRESH"); 

あなたが交互に影響を受けた事業体の@Cacheable注釈

@Cacheable(false) 
public class EntityThatMustNotBeCached { 
... 
} 
を設定することができます
3

あなたは、コンフィギュレーション・エンティティのいくつかの種類を返すと、データが古くなっていないことを確認したいしている場合クエリからエンティティを返した後にem.refresh(yourEntity)を呼び出すことができます。これにより、JPAプロバイダはキャッシュされたデータにもかかわらず、データベースから新しいデータを取得するようになります。

L2キャッシュを無効にする場合は、をpersistence.xmlに、Cacheable(false)を設定エンティティに直接使用してください。

エンティティではなくプレーンフィールドを返していても失効したデータが残っている場合は、em.clear()を呼び出してPersistenceContextをクリアしてみてください。

関連する問題