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

Kew*_*ang 6 java annotations hibernate second-level-cache

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

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

提前致谢!

Mat*_*tej 7

警告:正如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
/>
Run Code Online (Sandbox Code Playgroud)

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