美文网首页
JPA 同一事务中先更新再查询问题

JPA 同一事务中先更新再查询问题

作者: 圣瓦伦 | 来源:发表于2020-11-18 12:11 被阅读0次

先看例子

    @Transactional
    public Result methodA(Long id) {
        Result result = new Result();
        WorkOrderEntity entity1 = workOrderRepository.findById(id).get();
        //更新前对象的status是1,
        workOrderRepository.updateWorkOrderStatus(id, 2);
//        entity.setOrderStatus(OrderStatusEnum.FINISHED.getCode());
//        workOrderRepository.save(entity);
        WorkOrderEntity entity2 = workOrderRepository.findByIdAndStatus(id, 2)
        //此处根据更新后的status=2能查询出记录,但是entity中的status状态却是旧的status=1
         ...
         return result;
    }

在同一个事务中,先更新再根据更新后的字段查询,查询条件是更新之后的,但是查询结果是更新前的;

问题分析

上面例子用的是自定义的update语句,在jpa中是不会刷新缓存的,也就是entity还是同一个对象,所以更新结果并没有刷新,entity2.status=1;
如果换成原生的save()方法,jpa会刷新缓存,entity就不是同一个对象,entity2.status=2

但是为什么根据status=2能查出entity.status=1的记录?百思不得其解

相关文章

网友评论

      本文标题:JPA 同一事务中先更新再查询问题

      本文链接:https://www.haomeiwen.com/subject/zxfbfhtx.html