出于某些业务原因,我在应用程序中使用 Hibernate 二级缓存 我无法再更改实体注释.

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

提前致谢!

有帮助吗?

解决方案

警告: 正如 Jens Schauder 所指出的,不可能通过设置 maxElementsInMemory="0" 将 Ehcache 配置为在内存中存储 0 个元素,因为它实际上会导致相反的效果 - 设置缓存的无限大小。该行为并未在 休眠缓存 页面但记录在 缓存配置 页。

我快速查看了文档,但尚未找到替代方法。我无法自己删除这个答案。:-(

我原来的建议:

您可以将二级缓存的实现提供者配置为较短的 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 文档中。

其他提示

在陶土3.1以上,则可以在每个区域的基础启用/禁用休眠第二级高速缓存,无论是在配置(静态地)和在运行时,使用陶土开发者控制台。

您还可以监视在有关缓存和休眠,用于在群集或群集范围个别节点的实时统计信息。

陶土是开源的。详情,请参阅陶土为休眠

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top