6

我在我的应用程序中使用 Hibernate 二级缓存,由于某些业务原因,我不能再更改实体注释

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

提前致谢!

4

2 回答 2

7

警告:正如 Jens Schauder 所指出的,无法通过设置 maxElementsInMemory="0" 将 Ehcache 配置为在内存中存储 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
/>

请参阅Ehcache 文档中的休眠缓存

于 2009-06-01T11:07:37.040 回答
1

在 Terracotta 3.1 及更高版本中,您可以使用 Terracotta 开发人员控制台在配置(静态)和运行时基于每个区域启用/禁用 Hibernate 2nd Level Caches。

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

Terracotta 是开源的。有关更多详细信息,请查看用于 Hibernate 的 Terracotta

于 2009-06-11T07:12:24.800 回答