我在应用程序中使用了Hibernate二级缓存,由于某些商业原因, 我无法再更改实体注释 。
在我的项目中,除了从Hibernate更改数据库之外,还存在其他未通过Hibernate的本机SQL。因此,从本地SQL更新数据库后,Hibernate二级缓存数据可能会过时。这就是为什么我要 禁用某些实体的二级缓存(以编程方式或更改注释的其他方式)。
提前致谢!
警告: 正如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。