- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们需要能够回滚服务中的复杂事务,而不会向调用者抛出异常。我的理解是,实现这一点的唯一方法是使用 withTransaction。
问题是:
Class SomeService {
@NotTransactional
SomeComplexObject someMethod() {
SomeDomainObject.withTransaction{ status ->
DomainObject ob1 = new DomainObject.save()
LogDomainObject ob2 = insertAndCommitLogInNewTransaction()
SomeComplexObject ob3 = someAction()
if (!ob3.worked) {
status.setRollbackOnly() // only rollback ob1, not ob2!
}
return ob3
}
}
}
最佳答案
对于您的主要问题:如果您愿意,您可以选择一个随机域对象,它不会造成任何伤害。或者,如果您愿意,您可以找到当前 session 并在其上打开一个事务:
grailsApplication.sessionFactory.currentSession.withTransaction { /* Do the things */ }
Not sure how to communicate from inside a closure to outside it.
withTransaction
原则上可以返回任何它想要的东西,不管它的闭包参数返回什么。但事实证明,
withTransaction
返回其闭包返回的值。在这里,观看:
groovy> println(MyDomainObject.withTransaction { 2 + 2 })
4
withFoo
采用闭包的方法应该以这种方式工作,正是为了让您可以做您想做的事情。
关于grails withTransaction - 为什么它在域对象上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033278/
Grails版本3.2.9 对于withTransaction的Grails documentation并没有说太多,例如,当我想在该事务中同时保存Author.withTransaction和Boo
我们需要能够回滚服务中的复杂事务,而不会向调用者抛出异常。我的理解是,实现这一点的唯一方法是使用 withTransaction。 问题是: 为什么我必须在域对象上调用它,例如 Books.withT
在 Controller 方法中是以下代码块。 def stat = '' stat = assignBibNumbers(compositeEvent.id) 这是上面代码中调用的私有(pr
将@GrailsCompileStatic批注添加到方法或类中可允许使用动态GORM查找器,例如findAllByIdAndProperty()。 但是,添加注释不允许使用domainClass.wi
我正在使用带有 Multi-Tenancy DB的Grails 3应用程序。可以理解,出于连接池性能的原因,对 Multi-Tenancy DB的任何查询都必须在事务中进行。我没有链接,但是Graem
就连接处理而言,我对groovy SQL文档非常困惑。我需要了解最佳做法或如何正确处理基础连接。 假设我有一个这样的对象。 SqL sql = new Sql(dataSource); sql.wit
试图弄清楚如何在 grails 中使用备用数据源打开事务。我定义了以下数据源... dataSource { dbCreate = "update" url = "jdbc:h2:me
我可以在 withTransaction 内提交吗?关闭?我想在我的 Quartz 里面做这样的事情工作: Author.withTransaction { def author = Auth
首先是一些背景知识:我正在使用 Spring Security 的修改版本来执行 Active Directory 身份验证,并检查存储在数据库中的可能访问权限。这意味着在普通的 Groovy 类中有
以下操作有什么区别? def someAction() { User.withTransaction { ... } } 和 def someAction() { User.withNewTr
我正在尝试测试以下 LocalDataSource 函数, NameLocalData.methodThatFreezes 功能,但它卡住。我该如何解决这个问题?或者我该如何以另一种方式对其进行测试?
Mongoose 的 session.withTransaction helper 只执行第一次写入。这是代码: const session = await mongoose.startSession
当找不到作者时,我会基于场景创建一个withException的自定义异常,但是我面临的问题是即使代码在不存在的作者的异常块中进入,它也不存在继续进行。 只是想检查是否有我在这里错过或做错的事情。 A
This文章说以下内容: Product.withTransaction{ product.status = "ACTIVE" product.save(flush:true) //w
简介 嘿, 我正在尝试从 mongoose withTransaction 回调传递数据。现在,我正在使用以下代码来实现回调: const transactionSession = await mon
当我设置 Grails Quartz 时像这样的工作: class TestJob { static triggers = { simple repeatInterval: 5
我正在使用 Grails 1.1 beta2。我需要将大量数据导入我的 Grails 应用程序。如果我反复实例化一个 grails 域类然后保存它,性能会慢得无法接受。以从电话簿中导入人员为例: fo
class MyViewModel(private val db: AppDatabase): ViewModel() { suspend fun insertAndRead(pages: L
我在让交易在我的 Play 应用程序中正常工作时遇到了一些麻烦,而且我的代码的结构方式使我无法花时间“正确”执行它,如 Play 框架文档中所示。 仅使用 @Transactional 是不够的,因为
使用以下内容 import groovy.sql.Sql def sql = Sql.newInstance("jdbc:mysql://localhost:3306/eventDb", "user"
我是一名优秀的程序员,十分优秀!