我正在grails 2.4.4中的单个Service
上执行以下逻辑。
class SampleService {
void process(params1, params2) {
SampleDomain1 sd1 = new SampleDomain1()
sd1.setProperties(params1)
sd1.save()
SampleDomain2 sd2 = new SampleDomain2()
sd2.setProperties(params2)
sd2.save()
}
}
我了解的是
Service
在默认情况下是事务性的。如果sd1.save()
成功,但sd2.save()
不成功,它将回滚更改并抛出错误。如果两者均成功,则两者均在服务退出时提交。如果我的理解是正确的,那么这两个都应该已经保存到数据库中了。但是,问题是:不会—除非您基于我的测试(使用相同的
flush: true
和params1
组来显式使用params2
参数),否则就不会。 sd1.save(flush: true)
SampleDomain2 sd2 = new SampleDomain2()
sd2.setProperties(params2)
sd2.save(flush: true)
}
顺便说一下,这是我真正要避免的事情(将它设置为
@Transactional
的意义是什么)。如果这是Hibernate 4 / Grails 2.4的难点,那么我需要怎么做才能使我的服务在服务调用的每一端再次提交?我需要配置Grails的任何全局配置吗?我真的需要在每项服务结束时自动刷新Domain类。注意
我已经保证数据是正确的,包括调用
.validate()
和其他检查器。成功执行.save(flush: true)
证明了这一点。我发现的问题是FlushMode
上的regarding to the update on Grails 2.4。现在,也许我真正需要的是全局设置来覆盖此设置。
最佳答案
如果您的数据没有刷新到数据库层,那么就会想到一些可能性。
编辑:
我将尝试回答新编辑中的要点。
关于grails - 成功调用服务后,Grails无法提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34807123/