首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails -使用回滚管理数据库事务

问Grails -使用回滚管理数据库事务
EN

Stack Overflow用户
提问于 2014-07-04 00:12:54
回答 2查看 276关注 0票数 0

GGTS 3.4Grails 2.3.3 -在生成控制器时,这个版本包含了许多我以前没有见过的@Transactional行,我不能完全理解它们在做什么。

在控制器的顶部有一行代码:

代码语言:javascript
复制
@Transactional(readOnly = true)

然后,在某些dB更改操作:“保存”、“更新”和“删除”之前,有一行代码:

代码语言:javascript
复制
@Transactional

我假设这会将每个dB更改操作的readOnly切换为false。它是否会打开一个可以提交或回滚的新事务?有没有简单的方法来强制回滚?

“create”操作前面没有@Transactional行,尽管它执行了“new”db命令来创建特定域类的新实例。如果保存事务未完成或被回滚,这个新创建但未保存的实例会发生什么情况?由于未完成,我正在考虑在“创建”视图中引入一个“取消”按钮,使用户可以在选择的情况下退出创建-此外,用户可以简单地导航出创建视图,而不调用保存。

-mike

EN

回答 2

Stack Overflow用户

发布于 2014-07-04 00:20:34

未设置任何属性的标准@Transactional使用平台默认值。这取决于您的事务管理器和数据源。但是,它确实创建了一个可以提交或回滚的事务。

没有任何注解的Conroller方法不参与任何事务(假设整个类也没有注解)。

在使用create的情况下,不需要事务,因为您没有与数据库/事务管理器交互。简单地创建一个域类的新实例,例如new MyDomainClass()根本不会与数据库交互,这就是您在create方法中看到的。

因此,简而言之,如果用户离开页面或单击cancel,则无需担心该实例。

票数 0
EN

Stack Overflow用户

发布于 2014-10-11 13:20:30

您可以使用域名的"withTransaction“方式手动管理您的交易,如下所示:

Account.withTransaction {状态->

尝试{在此处编写代码或业务逻辑}catch(异常e){

代码语言:javascript
复制
  status.setRollbackOnly()

}}

如果生成异常,则该事务将被回滚

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档