[英]How to know if a transactional method in a grails service was successful?
我有这样的事情:
class SomeService {
static transactional = true
def someMethod(){
...
a.save()
....
b.save()
....
c.save()
....
etc...
}
}
我想知道事务方法是否成功,我不想检查每个域对象中的error属性,因为逻辑涉及许多域类,而且这很困难。
采用
a.save(failOnError: true)
b.save(failOnError: true)
c.save(failOnError: true)
d.save(failOnError: true)
我假设您想要的服务是在单个域保存错误时引发异常,并在这种情况下回滚事务。
您可以通过多种方式进行检查:-
由于您不想跟踪服务类中的所有saves
,因此我想您也不想跟踪每个保存都设置failOnError
标志的情况。 另一种方法是在Config.groovy
设置grails.gorm.failOnError=true
,如果对域类的验证失败,它将自动检查每个保存并抛出ValidationException
。 ValidationException
是一个RuntimeException
因此如果抛出一个事务,该事务将被回滚。 看一下failOnError可以得到这个主意。
(在您的情况下,稍为冗长)Save方法在成功的情况下返回域对象本身,在验证失败时返回null。 再次,您将跟踪所有saves
以检查类似if(a.save()){...}
, if(b.save()){...}
,等等等等。
(我认为适当的方法)将使用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()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.