栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JpaRepository缓存新创建的对象。如何刷新呢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JpaRepository缓存新创建的对象。如何刷新呢?

如果您使用的是Hibernate,则这是预期的结果。当你打电话

translationRepository.saveAndFlush(translation)
,并
translationRepository.findOne(t.getId())
一前一后,他们打它保持的所有对象,它已经在工作的高速缓存中的同一个Hibernate
Session。因此,第二个调用只是返回传递给第一个对象的对象。这两行中没有任何内容会迫使Hibernate
SELECT
在数据库上为该
Version
实体触发查询。

现在,JPA规范

refresh
EntityManager
接口上确实有一个方法。不幸的是,Spring Data
JPA没有使用其
JpaRepository
接口公开此方法。如果可以使用此方法,则可以完成该操作
t =translationRepository.saveAndFlush(translation)
,然后
versionRepository.refresh(t.getVersion())
强制JPA提供程序将版本实体与数据库同步。

实现此方法并不困难。只需

SimpleJpaRepository
从Spring Data JPA
扩展类并自己实现该方法即可。有关详细信息,请参阅向所有Spring Data
JPA存储库添加自定义行为。

一种替代方法是像

versionRepository.findOne(version.getId())
在转换上设置版本实体之前一样加载版本实体。由于您可以在代码中对版本ID进行硬编码,因此您的版本似乎是静态的。因此,您可以将您的
Version
实体标记为
@Immutable
@Cacheable
(前者是特定于Hibernate的注释)。这样,
versionRepository.findOne(version.getId())
不应在每次调用数据库时都访问数据库。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号