本文总结了编程性事务和声明性事务回滚的两种方法,并提到了一个非常容易忽视的问题。
回滚编程性事务
编程性事务在Grails中是通过withTransaction方法实现的,它接收一个闭包,并且会把TransactionStatus传给这个闭包。要想回滚事务,调用TransactionStatus上的setRollbackOnly()方法即可。下面是一个账户转账的例子:
01 |
Account.withTransaction { status -> |
04 |
source.balance -= amount
|
08 |
status.setRollbackOnly()
|
回滚声明性事务
利用服务,可以在Grails中轻松地实现声明性事务。如果要回滚事务,只要在服务的方法中抛出RuntimeException或其子类即可。看下面这个例子:
2 |
boolean transactional = true
|
6 |
throw new RuntimeException( "save b failed!" )
|
这里需要注意的是,在Grails文档中并没有明确指出要抛出的必须是RuntimeException,而只是提到只要抛出Exception就可以了。但实际上,这是错误的。Spring的文档已经指出,对于声明性事务,方法需要抛出一个“unchecked”异常,这样才会触发回滚事务。
不信的话,各位可以试一试,把上面的RuntimeException换成Exception,对比前后数据库中的结果。在做这个实验时,请确保底层的数据库引擎是支持事务的,以免结果不正确。
分享到:
相关推荐
Grails Grails Grails Grails Grails
grails-petclinic, Grails的介绍性示例应用程序 Petclinic示例应用程序这是Grails标准的介绍性示例应用程序。 要开始使用它,只需克隆存储库,然后从本地副本运行中进行操作: ./gradlew run 在unix系统上,或者 ...
Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南
Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。 Grails是个一栈式开发框架,它尝试通过核心技术...
Grails探索之访问存储过程及其事务控制 Grails探索系列 来自IBM
Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。
Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程
基于Spring事务抽象概念,实现事务服务层 借助于功能强大的Groovy动态语言和领域特定语言(Domain Specific Language,DSL),以上那些特性变得非常易用。 这篇文档会向你介绍如何使用Grails框架来搭建Web应用程序...
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入...
Grails1.1最新 中文 文档 当今的Java Web开发技术...Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。
grails+Xfire webservice
详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发
2.3.2 元编程(metaprogramming) 2.3.3 生成器(builder) 2.4 本章小结 第3章 grails工程基础架构 3.1 grails工程结构 3.2 grails和mvc模式 3.2.1 mvc中的模型(m) 3.2.2 ...
grails-2.1.zip.001
Grails专为下一代JavaWeb应用程序而设计的框架,其借助于Groovy动态语言,使Web开发变得简单而方便。Grails尽量为更多现有的Java项目创建一个全面的框架(不仅局限于视图处理),这和当前一些Java框架提供给用户的一...
Grails 中文 参考手册
grails的插件系统也是其亮点之一。首先,和rails,django等web框架类似,基于微内核的思想,插件(可重用模块)是框架的一等公民。grails除了核心模块以外的功能几乎都是通过插件方式实现的。实际上,一个grails插件...
Grails 1.3.7英文版官方参考手册,学习Grails的权威指南
grails 中文文档+grails-fckeditor-0.9.5.zip插件