gpt4 book ai didi

java - Spring data findone 未获取最新数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:20 25 4
gpt4 key购买 nike

我为我的应用程序配置了 spring 数据,其中我的 DAO 接口(interface)扩展了 org.springframework.data.repository.CrudRepository 来执行简单的数据库操作。即使我的数据库具有最新数据,DAO 的 findOne(id) 方法之一也不会返回表的最新记录。它始终返回旧版本的记录。没有为应用程序配置缓存。是否有任何默认的 JPA 级别缓存阻止它返回最新数据?

编辑:我在保存记录后调用 em.flush() ,因此后续调用 findOne(id) 必须给我最新的记录。

但是,我看到一个潜在的问题,我的整个应用程序都在集群环境中运行,因此调用 em.flush() 可能只会刷新正在更新数据的一个节点中的数据,而所有其他节点可能仍然具有旧数据,这可能导致对 findOne(id) 方法的后续调用正在通过可能尚未发生刷新的其他节点。有没有办法跨节点刷新或者是否有自动刷新数据的默认超时?

最佳答案

您可以尝试禁用 hibernate 二级缓存。当您使用集群环境时,当您创建/更新任何内容时,根据我的理解,它会更新请求所在的一个集群的缓存,但不会更新另一个集群的缓存。但是,当您尝试获取相同的记录并且当您的请求发送到另一个集群时,它会给您旧的记录,而不是最新的记录。

您可以使用以下配置:

jpa:
properties:
hibernate:
#################### HIBERNATE EHCACHE ####################
#Disable second level cache for hibernate
cache:
use_second_level_cache: false
auto_evict_collection_cache: false
region:
factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
use_query_cache: true

此外,您应该使用 findById() 方法,而不是使用 findOne() 方法,就像在 2.0 版本中一样,Spring-Data-JPA 修改了 findOne() 方法,现在它返回一个Optional。这对于防止 NullPointerException 来说还不错。

See this for more info.

如果我错了,请纠正我。

关于java - Spring data findone 未获取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49170781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com