1

我有这样的事情:

class SomeService {
   static transactional = true

    def someMethod(){
      ...
      a.save()
      ....
      b.save()
      ....
      c.save()
      ....
      etc...
}

}

我想知道事务方法是否成功,我不想检查每个域对象中的错误属性,因为逻辑涉及到许多域类,这会很困难。

4

2 回答 2

3

利用

a.save(failOnError: true) 
b.save(failOnError: true)
c.save(failOnError: true) 
d.save(failOnError: true)

我假设您想要的是在单个域保存错误时引发异常的服务,并在这种情况下回滚事务。

于 2013-06-28T04:50:16.900 回答
2

您可以通过多种方式进行检查:-

  1. 由于您不想跟踪saves服务类中的所有内容,我想您也不希望跟踪每个保存设置failOnError标志。另一种方法是设置自动检查每个保存并在域类验证失败的情况下抛出grails.gorm.failOnError=true一个。是一个因此如果抛出一个事务将被回滚。看看failOnError就知道了。Config.groovyValidationExceptionValidationExceptionRuntimeException

  2. (在您的情况下略显冗长)如果验证失败,Save 方法将返回域对象本身,否则返回 null。再次,您可以跟踪所有内容saves以检查类似if(a.save()){...}, if(b.save()){...}, blah, blah ....

  3. (我认为适当的方法)将TransactionAspectSupport用于获取事务状态并检查它是否设置为仅回滚。如果不是,那么你很好。

例如:

def someMethod(){
   try{
      ...
      a.save()
      ....
      b.save()
      ....
      c.save()
      ....
      etc...
   }catch(e){
      //It can also be used as a last line in method instead of checking
      //in catch block.
      println TransactionAspectSupport.currentTransactionStatus().isRollbackOnly() 
   }

   //println TransactionAspectSupport.currentTransactionStatus().isRollbackOnly() 

}
于 2013-06-28T05:04:22.813 回答