どのように私は、注釈を変更せずに休止状態にあるいくつかの特定のエンティティの二次キャッシュを無効にすることができます

StackOverflow https://stackoverflow.com/questions/934133

質問

私は、特定の業務上の理由のために、私のアプリケーションでのHibernateの二次キャッシュを使用しているの I は、任意の複数のエンティティの注釈を変更することはできません。

私のプロジェクトでは、離れて休止状態からのデータベースを変更することから、休止状態を通過していない他のネイティブSQLも存在します。そのために、Hibernateの二次キャッシュのデータは、ネイティブSQLから更新されたデータベースの後に古い可能性があります。私は特定のエンティティ(注釈を変更するよりも、プログラムまたはその他の方法)のための二次キャッシュを無効にするのしたい理由です。

事前に感謝します!

役に立ちましたか?

解決

警告:のイェンスSchauderで述べたように、それが効果的に逆の効果を生じさせるようmaxElementsInMemory =「0」を設定することによって、メモリ0の要素を格納するEhcacheのを設定することは不可能である - キャッシュのために無制限のサイズを設定します。この動作は、にHibernateのキャッシュのページに記載されていないが、=のhref <上文書化されています"http://ehcache.org/documentation/configuration.html" のrel = "nofollowをnoreferrer">キャッシュの設定のページます。

私はすぐにドキュメントを検討しているし、まだ別のアプローチを発見していません。私は自分自身でこの回答を削除することができません。 : - (

の私の元の提案:

あなたが短いTTL時間に対する第2レベル・キャッシュの実装プロバイダを構成することができ、および/または特定のエンティティタイプの0エントリを格納する。

例えば。あなたはEhcacheのを使用している場合、あなたはehcache.xmlでそれを設定することができます:*

<cache
name="com.problematic.cache.EntityName"
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName
overflowToDisk="false" <<== Do not overflow any entries to disk
/>

を参照してください。にHibernateのキャッシュのEhcacheのドキュメントでます。

他のヒント

テラコッタ3.1では、上、あなたは、Hibernate第2レベルキャッシュはテラコッタデベロッパーコンソールを使用して、コンフィギュレーション(静的)で、実行時に両方、地域ごとに有効/無効にすることができます。

また、クラスタまたはクラスタ全体で個々のノードのために、キャッシュおよび休止状態に関するリアルタイムの統計で監視することができます。

兵馬は、オープンソースです。詳細については、Hibernateののテラコッタnoreferrer">

scroll top