0

明確で簡単にするために、2つのプロジェクトがあります。1。このプロジェクトにすべてのエンティティクラスがあるエンティティプロジェクト。2.アプリケーションを実行するためのmain()関数を含むプロジェクト、Myehcache.xmlはこのプロジェクトのクラスパスに配置されます。

私の問題は次のとおりです。ehcache.xmlのdefaultCache要素を変更でき、SQLログファイルから変更を確認できます。ただし、HibernateはdefaultCache要素のみを読み取ると思います。これは、 ehcache.xmlの特定のエンティティのキ​​ャッシュ要素を変更しても、SQLログには変更がないためです。

例: defaultCache要素のmaxElementsInMemoryを0設定した場合、エンティティの​​ャッシュ要素のmaxElementsInMemoryを100または0設定しても、そのエンティティは2番目のレベルのキャッシュにキャッシュされません。defaultCache要素のmaxElementsInMemory100に設定すると、エンティティの​​ャッシュ要素のmaxElementsInMemoryを100または0設定しても、そのエンティティは常に2番目のレベルのキャッシュにキャッシュされます。

では、エンティティのキ​​ャッシュ要素のname属性が誤って設定されており、Hibernateから読み取ることができないのではないでしょうか。

4

2 に答える 2

1

私は自分の問題がどこにあるかを見つけました。キャッシュプロバイダーとしてehcacheを使用しています。ehcache.xmlでは、standardQueryCache要素を設定しなかった場合、defaultCache要素はすべてのQueryCacheにも使用されると思います。したがって、すべてのQueryCacheがdefaultCache領域を使用しているため、maxElementsInMemoryを「0」に設定するかどうかは重要ではありません。ただし、maxElementsInMemoryを「0」に設定すると、EntityManager.find()関数を使用するときに、そのエンティティのsencondレベルのキャッシュを無効にするのに間違いなく役立ちます。

于 2009-06-05T16:52:13.993 に答える
0

ドキュメントを読んでください。設定の場合maxElementsInMemory、 の値に0は特別な意味があります - unlimited。したがって、キャッシュをまったく取得しない代わりに、すべてをキャッシュしています。

于 2010-10-11T15:18:40.730 に答える