ska*_*kaz 5 grails groovy hibernate transactions
我有一个标记为事务的Grails服务,它做了很多事情.
我正在为此方法添加代码,而不是在我逐步完成时获得我期望的结果:
.save()在整个方法完成之前,我有调用在MySQL后端无法看到的代码.这是我所期望的,因为服务方法是事务性的..save()可以在服务方法完成之前在MySQL中看到.我不明白这一点,我不明白这与1之间的差距.groovy.sql.Sql插入数据库.我猜这是在Grails事务处理之外,所以在方法结束之前提交这一事实是有道理的.我可以让Grails在交易中管理这个吗?请在我的假设中消除任何错误.这是一些相关的代码:
主要服务方式
public void updateDb(Date date) {
// Create the results
if (createResults() > 0) {
createA()
createB()
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个
A a = new a()
a.user = user
a.week = week
a.save()
Run Code Online (Sandbox Code Playgroud)
createB
userWeek = new UserWeek(user: user)
userWeek.number = 1
userWeek.save(flush: true)
Run Code Online (Sandbox Code Playgroud)
createResults
String insert = "insert into ..."
Sql sql = new Sql(dataSource)
sql.execute(insert)
Run Code Online (Sandbox Code Playgroud)
我添加flush:true了使它成为刷新,但我现在明白,只是刷新hibernate但实际上没有提交事务,因为它是事务性的.我究竟做错了什么?
您可以groovy.sql.Sql通过使用Sql带有连接参数的构造函数来运行服务方法正在使用的事务:
Sql sql = new Sql(sessionFactory.currentSession.connection())
Run Code Online (Sandbox Code Playgroud)
这应解决在同一服务方法中在不同时间提交数据的问题.
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |