我的服务层中有以下方法,它
getOrderById
@Override public Order getOrderById(long id) { return orderDao.get(Order.class,id);}
和DAO的方法updateOrderStatus
@Override
public int updateOrderStatus(AppEnums.OrderStatus status, long orderId) {
String query = "update Order set orderStatus=:status where id=:orderId";
Query q = getHibernateSession().createQuery(query);
q.setParameter("status", status);
q.setParameter("orderId", orderId);
return q.executeUpdate();
}
当方法执行时,DB被成功更新,但是返回的实体的状态不是,反映的是更新后的状态值。默认情况下,在同一事务中所做的更改不应该是可见的吗?
发布于 2015-12-10 19:27:56
你可以,
更新实体并保存它
(正如M.Deinum在评论中建议的那样)
order.setOrderStatus(OrderStatus.PENDING_COMPLETION); //2
return salesOrderDao.saveOrUpdate(order); //3
在事务更新后提交事务
@Transactional
@Override
public Order acceptOrder(long orderId){
Order order = getOrderById(orderId); // 1
orderDao.updateOrderStatus(OrderStatus.PENDING_COMPLETION, orderId); // 2
//commit the transaction // 3
return getOrderById(orderId); // 4
}
注意:您需要以某种方式访问事务。
从会话缓存中删除实例
您可以使用Session.evict来完成此操作
orderDao.updateOrderStatus(OrderStatus.PENDING_COMPLETION, orderId); //2
hibernateSession.evict(order); //3
return getOrderById(orderId); //4
注意:您需要访问HibernateSession
但是你可以做这个answer中提到的事情,
@Transactional
public void method1(){
this.updateM1Service();
this.getDataService();
}
@Transactional (propagation = Propagation.REQUIRES_NEW)
public void updateM1Service(){
dao.updateM1();
}
@Transactional
public void getDataService(){
dao.getData();
}
https://stackoverflow.com/questions/34200369
复制相似问题