为了清楚简单,我有两个项目: 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读取?
答案 0 :(得分:1)
我找到了问题所在。我正在使用ehcache作为缓存提供程序。在ehcache.xml中,我认为defaultCache元素也用于所有的QueryCaches,如果我没有设置standardQueryCache元素。因此,我是否将maxElementsInMemory设置为“0”并不重要,因为所有QueryCache都使用defaultCache区域。但是,将maxElementsInMemory设置为“0”肯定有助于在使用EntityManager.find()函数时禁用该实体的第二级缓存。
答案 1 :(得分:0)
请阅读文档。如果设置maxElementsInMemory
,则值0
具有特殊含义 - unlimited
。因此,不是没有任何缓存,而是缓存所有内容。