如果在lock 前get会有cache缓存的问题。
@Transactional
public void getOrder(String id){
trans2(id);
}
public Order trans2(String id) {
Optional<Order> o = orderRepository.findById(id);
Order order = o.get();
order = orderRepository.lockById(order.getId());
order.setName("test");
orderRepository.save(order);
return order;
}
如上,在lock前拿order, order会缓存,lock之后强制重新拿数据,刷新缓存。
方案
@Transactional
public void getOrder(String id){
trans2(id);
}
public Order trans2(String id) {
Optional<Order> o = orderRepository.findById(id);
Order order = o.get();
order = orderRepository.lockById(order.getId());
entityManager.refresh(order); //重新从db里面拿数据
order.setName("test");
orderRepository.save(order);
return order;
}