当前位置: 首页 > 面试题库 >

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

饶曦之
2023-03-14
问题内容

我在应用程序中使用了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。



 类似资料:
  • 本文向大家介绍在某些情况下如何更改R数据帧中的列?,包括了在某些情况下如何更改R数据帧中的列?的使用技巧和注意事项,需要的朋友参考一下 有时,特定列的列值与另一列有某种关系,我们可能需要根据某些条件来更改该特定列的值。我们需要进行此更改,以检查列值的更改如何对所考虑的两个列之间的关系产生影响。在R中,我们可以使用单个方括号来更改列值。 示例 请看以下数据帧- 假设我们想从第2列(x2)值中减去2,

  • 使用SpringBoot2、SpringDataJPA和Hibernate。我试图对一些从未更新过的实体使用Hibernate的二级缓存。 在我的例子中,实体与其他实体相关,因此当查询一种文档类型时,Hibernate将进行4次sql查询。使用Hibernate二级缓存时,缓存用于某些实体,但仍有一个对数据库的sql查询。我想了解为什么在一种情况下不使用缓存。 这是我的实体的样子: 当我第一次使用

  • 我正在使用咖啡因缓存,并寻找一种方法来更新缓存中的值,而不更改其过期时间。 场景是我使用缓存来加速数据加载。数据更改延迟5秒是可以接受的,而我希望返回速度很快。此外,我希望这些缓存在第一次命中1天后过期,以避免不必要的内存使用。 因此,我希望每个缓存的密钥持续一天,但其值每5秒更新一次。 方法似乎已关闭,但刷新持续时间后的第一个返回值仍然是旧值。这对我来说并不理想,因为两次点击之间的持续时间可能是

  • 问题内容: 我正在使用@cacheable注解缓存函数的结果。我有3个不同的缓存,每个缓存的关键是当前登录的用户的用户ID,该用户ID与方法中的参数连接在一起。在某个事件中,我想逐出所有具有以该特定用户ID开头的键的缓存条目。例如 : 我希望缓存逐出注释为: 但是当我尝试实现这一点时,它给了我一个错误: 什么是实现此目的的正确方法? 问题答案: 每个操作所有Spring Cache批注(即,等)都

  • 问题内容: 但是,首选解决方案(属性访问)在我的情况下不起作用(我缺少列异常-为什么?) 该模型如下所示:实体和。表含有列是的表,以便它是典型的关系。 现在的问题是,如果我取的实体,我需要有机会获得价值(亦称的实体),而不取实体。我怎样才能做到这一点? 我使用的映射如下所示: 我想做的是调用而无需从DB中额外获取实体。 根据我上面提到的答案,如果我将注释从字段移到getter(在实体上,我对吗?)

  • 我正在实现一个基于实体属性值的持久化机制。所有数据库访问都是通过Hibernate完成的。我有一个包含节点路径的表,它非常简单,只有一个id和一个路径(字符串)。路径数量很少,大约几千条。 主表有数百万行,我没有重复路径,而是将路径规范化为它们自己的表。以下是我在插入主表时想要的行为 1)检查路径表中是否存在路径(通过实体管理器查询,使用路径值作为参数) 2) 如果不存在,则插入并获取id(通过实