由于某些商业原因,我在我的应用程序中使用Hibernate二级缓存我无法再更改实体注释。如何在不更改注释的情况下禁用Hibernate中某些特定实体的二级缓存
在我的项目中,除了从Hibernate更改数据库外,还存在其他不通过Hibernate的本机SQL。因此,在从本地SQL更新数据库之后,Hibernate二级缓存数据可能会失效。这就是为什么我想要禁用某些实体的第二级缓存(以编程方式或其他方式而不是更改注释)。
在此先感谢!
由于某些商业原因,我在我的应用程序中使用Hibernate二级缓存我无法再更改实体注释。如何在不更改注释的情况下禁用Hibernate中某些特定实体的二级缓存
在我的项目中,除了从Hibernate更改数据库外,还存在其他不通过Hibernate的本机SQL。因此,在从本地SQL更新数据库之后,Hibernate二级缓存数据可能会失效。这就是为什么我想要禁用某些实体的第二级缓存(以编程方式或其他方式而不是更改注释)。
在此先感谢!
警告:作为延Schauder不指出的,这是不可能配置的Ehcache通过设置maxElementsInMemory =“0”,因为它有效地使相反的效果,以在内存中存储0个元素 - 设置无限大小的高速缓存中。在Hibernate Caching页面上未提及此行为,但在Cache Configuration页面上有记录。
我很快审阅了文档,但还没有找到替代方法。我无法自己删除这个答案。 :-(
我原来的建议:
您可以配置二级缓存的实现提供短TTL时间和/或存储特定实体类型的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 Caching的Ehcache文档中
。在Terracotta3.1及以上版本中,您可以使用Terracotta开发人员控制台在配置(静态)和运行时在每个区域基础上启用/禁用Hibernate二级缓存。
您还可以实时监控群集或群集中各个节点的缓存和休眠的统计信息。
兵马俑是开源的。欲了解更多详情,请查看Terracotta for Hibernate。
谢谢Matej,我想这正是我想要的答案! 我有另一个问题,我的ehcache.xml被放置在我的可运行项目的类路径,而实体类被放置在另一个实体项目。 看来Hibernate只能从我的ehcache.xml中读取默认的缓存设置。其是: Hibernate不读我的其他实体在ehcache.xml中缓存设置。 –
2009-06-01 12:33:28