Mongodb在异常时还原保存的事务

Mongodb在异常时还原保存的事务,mongodb,grails,transactions,Mongodb,Grails,Transactions,我的grails应用程序中有一个starnge场景,每当不同的用户同时下订单并且更新同一个菜单时,它会抛出一个乐观锁定异常,现在是这样的 def orderApi { // credits are deducted before try catch // code // ..... try { // code to place order } catch(Exception e){ // send mai

我的grails应用程序中有一个starnge场景,每当不同的用户同时下订单并且更新同一个菜单时,它会抛出一个乐观锁定异常,现在是这样的

 def orderApi {
          // credits are deducted before try catch
           // code
          // .....
  try {
        // code to place order
}
catch(Exception e){
    // send mail for exception
    orderFailed = true
}

if(orderFailed){
    refundUserCredits(order)
}
}


 def refunduserCredits(Order order){
      User user = order.user
      user.credits = order.credits
      if(!user.save()){
         println "Unable to save user"  // but it does not save the credits 

             }
}

我想,既然我捕获了异常,并退还了积分并保存了用户对象,那么应该保存它们。同样奇怪的是,如果它不保存用户信用,它应该进来!user.save()并打印消息,但它甚至没有这样做。帮助

我想你会从使用。它将允许您将下单和信用扣减捆绑在一起,作为一个全有或全无单元。现在,您正在实现自己的事务管理。事情会是这样的

Order.withTransaction { status ->
    // deduce credits and attempt to place order. save() all you want.

    if(orderFailed) status.setRollbackOnly()
}

因此,只有在一切顺利的情况下,订单和用户更改才会被保留。

是否有可能引发另一个异常?没有,正如我从日志中检查的那样,没有其他异常。出于某种原因,您可以说,已经实现的代码复杂度和大量修改,我无法尝试这样做,一旦抛出异常,我必须找到一个解决方案来保存用户信用。