[英]Spring Data Jpa - cache
您好我的问题是我无法避免缓存。 我在Spring Boot 1.5.4中使用Spring Data Jpa
我在做什么:有一种情况,当某个客户端向我的REST端点请求一些数据,并基于这些数据创建实体并将其保存到数据库中时,接下来我请求另一个REST端点,该端点会直接响应我,但是我请求我还没有完成。 接下来,我正在等待另一个服务,该服务必须请求我的另一个REST端点(第一个客户端一直在线)。 这个端点修改了在我收到第一个请求后创建的实体,这里出现了问题。
因此,基本上,第一个请求创建实体,并使用“ saveAndFlush”方法将其保存。 当第一个请求正在等待时,另一个线程使用spring数据jpa修改此实体:
@Modifying(clearAutomatically = true)
@Query("UPDATE QUERY ")
@Transactional
int updateMethod();
但是在那之后(当等待中释放第一个请求时),当我在第一个线程中调用findOne方法时,我得到了旧实体,我也尝试了重写方法:
@Transactional
default MyEntity findOneWithoutCache(Long id) {
return findOne(id);
}
但这也行不通,我还补充道
@Cacheable(false)
public class MyEntity {
而且这也不起作用。
当我以这种方式使用@Query选择此实体时,只有一种方法有效:
@Query("SELECT STATEMENT "
+ "WHERE p.id = ?1")
MyEntity findEntityById(Long id);
您能解释一下如何解决这个问题吗?
问题是您具有哪种事务隔离? 什么数据库,设置,驱动程序?
理论上,在理想的ACID事务中-开始事务后,您将看不到其他事务中所做的更改。 (请参阅重复读取)。
另一方面,通常您在ACID中没有I。 而且隔离性较弱。 (如“读取已提交”)。
如果查询有效,则表明您没有“可重复读”-因此,也许您应该简单地获取EnityManager(通过JpaContext)并尝试clear()会话(在第一个线程中)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.