GGTS 3.4Grails 2.3.3 -在生成控制器时,这个版本包含了许多我以前没有见过的@Transactional行,我不能完全理解它们在做什么。
在控制器的顶部有一行代码:
@Transactional(readOnly = true)然后,在某些dB更改操作:“保存”、“更新”和“删除”之前,有一行代码:
@Transactional我假设这会将每个dB更改操作的readOnly切换为false。它是否会打开一个可以提交或回滚的新事务?有没有简单的方法来强制回滚?
“create”操作前面没有@Transactional行,尽管它执行了“new”db命令来创建特定域类的新实例。如果保存事务未完成或被回滚,这个新创建但未保存的实例会发生什么情况?由于未完成,我正在考虑在“创建”视图中引入一个“取消”按钮,使用户可以在选择的情况下退出创建-此外,用户可以简单地导航出创建视图,而不调用保存。
-mike
发布于 2014-07-04 00:20:34
未设置任何属性的标准@Transactional使用平台默认值。这取决于您的事务管理器和数据源。但是,它确实创建了一个可以提交或回滚的事务。
没有任何注解的Conroller方法不参与任何事务(假设整个类也没有注解)。
在使用create的情况下,不需要事务,因为您没有与数据库/事务管理器交互。简单地创建一个域类的新实例,例如new MyDomainClass()根本不会与数据库交互,这就是您在create方法中看到的。
因此,简而言之,如果用户离开页面或单击cancel,则无需担心该实例。
发布于 2014-10-11 13:20:30
您可以使用域名的"withTransaction“方式手动管理您的交易,如下所示:
Account.withTransaction {状态->
尝试{在此处编写代码或业务逻辑}catch(异常e){
status.setRollbackOnly()}}
如果生成异常,则该事务将被回滚
https://stackoverflow.com/questions/24558715
复制相似问题