一尘不染

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

hibernate

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

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

提前致谢!


阅读 274

收藏
2020-06-20

共1个答案

一尘不染

警告: 正如Jens Schauder指出的那样,不可能通过设置maxElementsInMemory =“
0”将Ehcache配置为在内存中存储0个元素,因为它实际上会产生相反的效果-为缓存设置无限大小。在“
hibernate缓存”页面上未提及此行为,但在“
缓存配置”页面上对此行为进行了说明。

我已经快速查看了文档,还没有找到替代方法。我无法自行删除此答案。:-(

我最初的建议:

您可以将二级缓存的实现提供程序配置为缩短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文档中的Hibernate
Caching

2020-06-20