如何在不更改注释的情况下禁用Hibernate中某些特定实体的二级缓存

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

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

提前致谢!

警告:正如Jens Schauder所指出的,通过设置maxElementsInMemory =“0”来配置Ehcache以在内存中存储0个元素是不可能的,因为它有效地导致相反的效果 – 为缓存设置无限大小。 Hibernate缓存页面上未提及此行为,但在“ 缓存配置”页面上有记录。

我已经快速审查了文档,但还没有找到替代方法。 我自己无法删除这个答案。 🙁

我原来的建议是:

您可以将二级缓存的实现提供程序配置为缩短TTL时间和/或存储特定实体类型的0个条目。

例如,如果您使用的是Ehcache,则可以在ehcache.xml中进行配置:*

 

请参阅Ehcache文档中的Hibernate缓存 。

在Terracotta 3.1及更高版本中,您可以使用Terracotta Developer Console在配置(静态)和运行时基于每个区域启用/禁用Hibernate二级缓存。

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

兵马俑是开源的。 有关详细信息,请查看Terracotta for Hibernate 。