【问题标题】:Hibernate second-level cache ehcache.xml, the cache setting for entities can't be read to HIbernateHibernate二级缓存ehcache.xml,实体的缓存设置不能读到HIbernate
【发布时间】:2009-06-01 13:01:06
【问题描述】:

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

我的问题是: 我可以更改 ehcache.xml 的 defaultCache 元素,并且可以从 SQL 日志文件中看到更改。但我认为 Hibernate 只读取了我的 defaultCache 元素,因为无论我在 ehcache.xml 的特定实体的 cache 元素中发生什么变化,都不会发生任何变化SQL 日志。

例如: 如果我将 defaultCache 元素的 maxElementsInMemory 设置为 0,无论我设置 cache 的 maxElementsInMemory将实体的元素设置为1000,二级缓存中不会有该实体缓存。如果我将 defaultCache 元素的 maxElementsInMemory 设置为 100,无论我设置 cache 的 maxElementsInMemory 元素为 1000 的实体,总有那个实体缓存在二级缓存中。

所以我认为可能实体的cache元素的name属性设置错误,无法从Hibernate中读取?

【问题讨论】:

  • 这可能是 Hibernate 配置的问题。如果您可以包含 hibernate.cfg.xml(或 hibernate.properties)文件,以及至少一个 Hibernate 映射文件(或带注释的 Java 类),这将有所帮助。
  • 谢谢,我找到了我的问题所在。我正在使用 ehcache 作为缓存提供程序。在 ehcache.xml 中,如果我没有设置 standardQueryCache 元素,我认为 defaultCache 元素也用于所有 QueryCache。所以我是否将 的 maxElementsInMemory 设置为“0”并不重要,因为所有 QueryCache 都在使用 defaultCache 区域。但是将 的 maxElementsInMemory 设置为 "0" 绝对有助于在使用 EntityManager.find() 函数时禁用该实体的二级缓存。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    请阅读文档。在maxElementsInMemory 设置的情况下,0 的值具有特殊含义 - unlimited。因此,您将缓存所有内容,而不是根本没有缓存。

    【讨论】:

      猜你喜欢
      • 2015-05-14
      • 1970-01-01
      • 2014-09-11
      • 2010-10-28
      • 2010-11-16
      • 2014-11-28
      • 2011-12-18
      • 2012-12-12
      • 2014-10-18
      相关资源
      最近更新 更多