2009-06-01 54 views
5

由于某些商业原因,我在我的应用程序中使用Hibernate二级缓存我无法再更改实体注释如何在不更改注释的情况下禁用Hibernate中某些特定实体的二级缓存

在我的项目中,除了从Hibernate更改数据库外,还存在其他不通过Hibernate的本机SQL。因此,在从本地SQL更新数据库之后,Hibernate二级缓存数据可能会失效。这就是为什么我想要禁用某些实体的第二级缓存(以编程方式或其他方式而不是更改注释)。

在此先感谢!

回答

7

警告:作为延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文档中

+0

谢谢Matej,我想这正是我想要的答案! 我有另一个问题,我的ehcache.xml被放置在我的可运行项目的类路径,而实体类被放置在另一个实体项目。 看来Hibernate只能从我的ehcache.xml中读取默认的缓存设置。其是: Hibernate不读我的其他实体在ehcache.xml中缓存设置。 – 2009-06-01 12:33:28

1

在Terracotta3.1及以上版本中,您可以使用Terracotta开发人员控制台在配置(静态)和运行时在每个区域基础上启用/禁用Hibernate二级缓存。

您还可以实时监控群集或群集中各个节点的缓存和休眠的统计信息。

兵马俑是开源的。欲了解更多详情,请查看Terracotta for Hibernate

相关问题