我正在使用springboot2.3.5和hibernate以及hikari pool。
我有一个实体,我们称它为,这个实体有一个“executionstatus counter”长字段,在它的执行结束时由一个异步方法递增,所以我可以在多个线程上分割执行,有一个进度计数器。
增量的执行方式如下:
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Lock(LockModeType.PESSIMISTIC_WRITE)
default void incrementStatusCount(String lotto, Long progressivo) {
A a = findById(...).get();
a.setStatoLdSN(a.getStatoLdSN() != null ? a.getStatoLdSN()+1:1L);
saveAndFlush(a);
}
它工作得很好,所以在外部,使用db工具,我可以看到计数器的更新。现在,在整个执行结束时,我更改了整个执行的字符串状态,所以我加载了实体,但是实体已经在缓存中了,所以我在实体管理器上调用了一个刷新,我可以看到执行的查询以及从hibernate日志中检索到的值….和我的计数器0。现在,oracle默认隔离级别是read\u committed(我在连接上验证了它),我的增量值是committed的,因为我看到它使用db客户机,不是吗?那么为什么jpa,甚至不调用refresh就加载了正确的值呢?
暂无答案!
目前还没有任何答案,快来回答吧!