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

在Spring / Hibernate中正确使用缓存

贺景山
2023-03-14
问题内容

X项目包含以下部分:

一个。Spring Data存储库具有单独的方法,例如:

@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamA(String paramA);

@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamB(String paramB);

@CacheEvict("xobjects")
<E extends XObject> E save(E entity);

b。hibernate方式也使用“ xobjects”缓存。

问题#1 由于有两种添加对象以缓存的方法,因此可能是同一对象出现2次的情况。如何更好地解决这个问题?例如,使用结果对象中的键。就像是:

键=“#result.id”

问题#2
我不想在调用“保存”方法时从缓存中逐出所有对象,但是我不确定当前的实现是否会起作用。“保存”方法将xobject作为输入,因此CacheEvict会将其用作驱逐的密钥,并且我预期不会发生任何事情。在这里,我相信能够使用与上述魔术钥匙相同的方法会很好。

更新#1 实际上我认为我的建议可以奏效,这是一个示例-https:
//github.com/zhangkaitao/spring4-showcase/blob/master/spring-
cache/src/main/java/com/sishuok/spring/ service /
UserService2.java
但是我需要先对其进行测试。稍后将共享结果。


问题答案:

您的方法要么行不通,要么很难维护。除了需要手动维护缓存之外,如果希望管理实体实例,则还需要将它们重新合并到每个新的Hibernate会话(持久性上下文)中,因为从您自己的缓存返回的实体将始终分离。

最好的方法是使用Hibernate二级缓存,它将自动为您执行缓存条目生命周期作业。



 类似资料:
  • 问题内容: 我当时正在收集有关flush()方法的信息,但是我不清楚何时使用它以及如何正确使用它。从我的阅读中,我的理解是持久性上下文的内容将与数据库同步,即发布未完成的语句或刷新实体数据。 现在,我得到了具有两个实体的场景,并且(一对一关系,但未由JPA强制执行或建模)。具有手动设置的复合PK,还具有自动生成的IDENTITY字段。这应该作为的外键写入到实体。我要存钱,并且要进行一次交易。问题是

  • 我试图更好地理解JPA/Hibernate和SQL服务器的注释。 我创建了一个简单的项目:一个名为“Articles”的抽象类。有两个类继承了它:Ramette添加了权重,Pen添加了颜色。下面的代码无效,我无法更正错误。你有什么想法吗?非常感谢。

  • 我正在尝试将我的项目迁移到具有Hibernate反应模式的Quarkus反应模式,我不知道如何处理缓存。 我原来的方法是这样的 主题通过缓存键“subjectId”从缓存中加载(如果可用)。 迁移到兵变会是这样的 但是,将Uni对象存储在缓存中是不对的。 还有将缓存作为bean注入的选项,但是,回退函数不支持返回Uni: @CacheResult注释是否可以与Uni/Multi一起使用,并且所有内

  • 我有一个非私有的、非最终的存储库类,我会对它进行测试。我的简单测试看起来像:` } 在这里我模拟了一个自动连线的bean jdbctemplate。但当我启动应用程序时,它失败了,下一个例外是: org.Mockito.exceptions.base.mockitoException:Mockito无法模拟此类:class org.springframework.jdbc.core.jdbctem

  • 本文向大家介绍在 WildFly 中启用 Hibernate 缓存,包括了在 WildFly 中启用 Hibernate 缓存的使用技巧和注意事项,需要的朋友参考一下 示例 要在WildFly中为Hibernate启用二级缓存,请将此属性添加到persistence.xml文件中: 您还可以使用以下属性启用查询缓存: 启用Hibernate的二级缓存时,WildFly不需要您定义缓存提供程序,因为

  • 我在集群环境中使用Hibernate 5.4.22和Infinispan 11.0.4。Hibernate二级缓存配置为使用JCache提供程序: Infinispan由以下Infinispan.xml配置: 我有一个测试实体“配置文件”,它应该用策略缓存: 根据缓存并发策略/缓存模式兼容性表,