遇到问题:方法B中拿到的订单信息由于某种原因不是最新的,此时在方法B中利用订单号重新查询订单信息,查询到的信息为旧的信息,因为方法A与方法B在同一个事物中。
解决思路:新开一个事务查询最新的订单信息。
思路实现:
建一个类C,类C中有一个方法,暂且叫方法C,方法C中新开事务查询新的订单信息,方法B调用方法C获得最新的订单信息。
具体代码:
@Transactional
@Service("serviceC")
public class ServiceC {
@Resource(name="orderDAOImpl")
OrderDAO orderDAO;
@Transactional(propagation=Propagation.REQUIRES_NEW)
public FnInvestmentOrder getOrderByOrderNo(String orderNo)throws Exception{
Order order = new Order();
order.setOrderNo(orderNo);
return orderDAO.getOrderByOrderNo(order);
}
}
其中@Transactional(propagation=Propagation.REQUIRES_NEW)为必须的代码,意思是把旧的事务挂起,开启一个新的事务执行此方法,执行完再启动旧的事务。
需要注意的是:方法C必须与方法B不在同一个类中,否则用的还是旧的事务。