我有一个标记为事务性的Grails服务,它做了很多工作。Grails交易问题
我将代码添加到此方法并没有得到,我希望当我通过它一步结果:
- 我有一个调用
.save()
不能在MySQL后台看到,直到整个方法完成代码。这是我期望的服务方法是事务性的。 - 我有其他代码调用
.save()
,可以在服务方法完成之前在MySQL中看到。我不明白这一点,我不明白这和1之间的差距。 - 我还有更多的代码使用
groovy.sql.Sql
插入数据库。我猜测这是Grails事务处理之外的事情,所以在方法结束之前提交的事实是有道理的。我可以让Grails在交易中管理这个吗?
请在我的假设中解决任何错误。下面是一些相关的代码:
主要服务方法
public void updateDb(Date date) {
// Create the results
if (createResults() > 0) {
createA()
createB()
}
}
createA
A a = new a()
a.user = user
a.week = week
a.save()
createB
userWeek = new UserWeek(user: user)
userWeek.number = 1
userWeek.save(flush: true)
个createResults
String insert = "insert into ..."
Sql sql = new Sql(dataSource)
sql.execute(insert)
我加flush:true
使其齐平,但我现在明白了,只是冲水休眠但实际上没有提交事务,因为它是事务性的。我究竟做错了什么?
目前还不清楚你发布的代码发生了什么,而且在我看来你打破了惯例。在一个事务上下文中(grails方法调用),你故意试图摆脱事务? 另外,你为什么强迫刷新? –
@HansWesterbeek我没有试图摆脱任何事务 - 我只是看着我继承的代码,并试图理解它。我强迫刷新作为测试(因为我当时不明白),但我打算删除它。除了当前在事务外运行的'createResults'方法之外,没有任何东西应该提交,直到整个事务提交为止,对吧? – skaz