在Grails服务中回滚事务

在Grails服务中回滚事务,第1张

在Grails服务中回滚事务

是的,那样做。

默认情况下,Grails中的事务是在Service方法级别处理的。如果该方法正常返回,则将提交事务,如果引发RuntimeException,则将回滚该事务。

请注意,这意味着即使在将对象保存在服务器方法中的同时使用flush:true,如果抛出RuntimeException,数据库更改仍将回滚。

例如:

class MyService { def fiddle(id,id2){   def domain = Domain.findById(id)   domain.stuff = "A change"   domain.save( flush:true ) // will cause hibernate to perform the update statements   def otherDomain = OtherDomain.findById(id2)   otherDomain.name = "Fiddled"   if( !otherDomain.save( flush:true )){ // will also write to the db     // the transaction will be roled back      throw new RuntimeException("Panic what the hell happened")   }     }}

我对Grails的理解不是100%清楚的是,如果在直接的java /
spring世界中抛出了检查异常,将会发生什么,默认行为是让事务接收器提交事务,因此可以在配置中覆盖它。

注意:有一个警告,那就是您的数据库必须支持您要更新的表上的事务。是的,这是MySQL的问题:)

这也适用于该

Domain.withTransaction
方法。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5163349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存