先看例子
@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的记录?百思不得其解