2011-07-26 5 views
3

休止状態のキャッシュを無効にしたい。休止状態のキャッシュを無効にする

session.setCacheMode(CacheMode.IGNORE)は機能しません。
query.setCacheable(false)も機能しません。

さらに、オブジェクトX、Yではキャッシュが行われないが、オブジェクトZではキャッシュが行われるように構成することはできますか?

ありがとうございました。あなたのHibernateセッションファクトリを設定するとき

+1

*あなたが参照している*休止状態のキャッシュについてもっと具体的にすることはできますか?セッション/第1レベルキャッシュ、第2レベルキャッシュ、クエリキャッシュ、およびコレクションキャッシュがあります。 –

+0

私はセッションキャッシュを参照しています – AAaa

答えて

1

私はウェブを検索しましたが、実際にセッションキャッシュを無効にすることはできません。 これは非常に奇妙です。 自分の解決策は、キャッシュをクリアしたいときにsession.clear()を使うことです。

+0

は機能しません。私はすでにsession.clear()を試しています。 ダイレクトDBアップデートは、休止状態では表示されません。 他に何かを見つけた場合は教えてください。 –

+0

私のために働きます。新しいセッションを閉じて開くこともできます。 –

3

はそのような何かを試してみてください。

configuration.setProperty(Environment.USE_QUERY_CACHE, Boolean.FALSE.toString()); 
configuration.setProperty(Environment.USE_SECOND_LEVEL_CACHE, Boolean.FALSE.toString()); 
configuration.setProperty(Environment.CACHE_REGION_FACTORY,org.hibernate.cache.impl.NoCachingRegionFactory.class.getName()); 
configuration.setProperty(Environment.CACHE_PROVIDER,org.hibernate.cache.NoCacheProvider.class.getName()); 

しかし、あなたが休止状態(すべてではないJPA実装)によって提供されるセッション・キャッシュを無効にすることはできませんのでご注意します。あなたが本当にHibernateによってキャッシュされないものなら、それを追い出すか、またはハイバーネーションを使用しないでください(いずれか簡単です)

特定のエンティティをキャッシュするには、javax.persistence.Cacheableとそれがあなたのためにどのように働くか見てください。

+0

セッションキャッシュを無効にする方法はありませんか?奇妙に思えます。変更前後のDBオブジェクトを完成させたいのですが?唯一のwasyはそれがエビクトを使用しているのですか? – AAaa

+0

私はかなり確信しています...あなたがHibernate Entitiesを扱っているときは、セッションにオブジェクトを扱っています。上記のエンティティでSession.get()を呼び出すと、同じオブジェクトハンドル(またはそのエンティティのプロキシ)が返されます。 –

7

再利用可能なセッションオブジェクトをマネージャから取得する直前にsession.clear()に電話をかけることができます。

I.e.私たちのプロジェクトでは、多くのハイバネートセッション(httpセッションあたり1つ)間で更新を同期させなければなりませんでした。 2番目のレベルのキャッシュは正常に機能しますが、1番目のレベル(セッションごと)を無効にするかクリアする必要がありました。したがって、すべてのセッションを保存し、オンデマンドで配信するSessionManagerを作成しました。お届けの直前にsession.clear()とこれが問題を解決します。

作業単位を実行するまで、第1レベルのキャッシュは正常です。