Hibernate二级缓存ehcache.xml,实体的缓存设置无法读取到HIbernate

时间:2009-06-01 13:01:07

标签: java xml hibernate ehcache second-level-cache

为了清楚简单,我有两个项目: 1.一个实体项目,其中包含该项目中的所有实体类。 2.包含运行应用程序的main()函数的项目,My ehcache.xml放在此项目的类路径中。

我的问题是: 我可以更改ehcache.xml的 defaultCache 元素,我可以看到SQL日志文件中的更改。但我认为Hibernate只读取了我的 defaultCache 元素,因为无论我在ehcache.xml的特定实体的缓存元素中进行了哪些更改,都不会有任何更改。 SQL日志。

例如: 如果我将 defaultCache 元素的 maxElementsInMemory 设置为 0 ,那么无论我设置缓存的 maxElementsInMemory > 100 0 的实体元素,在二级缓存中不会缓存任何实体。如果我将 defaultCache 元素的 maxElementsInMemory 设置为 100 ,无论我设置缓存的 maxElementsInMemory > 100 0 的实体元素,在二级缓存中始终存在该实体缓存。

所以我想也许实体的缓存元素的name属性设置错误,无法从Hibernate读取?

2 个答案:

答案 0 :(得分:1)

我找到了问题所在。我正在使用ehcache作为缓存提供程序。在ehcache.xml中,我认为defaultCache元素也用于所有的QueryCaches,如果我没有设置standardQueryCache元素。因此,我是否将maxElementsInMemory设置为“0”并不重要,因为所有QueryCache都使用defaultCache区域。但是,将maxElementsInMemory设置为“0”肯定有助于在使用EntityManager.find()函数时禁用该实体的第二级缓存。

答案 1 :(得分:0)

请阅读文档。如果设置maxElementsInMemory,则值0具有特殊含义 - unlimited。因此,不是没有任何缓存,而是缓存所有内容。