我有一个标记为事务性的 Grails 服务,它做了很多事情。
我正在向此方法添加代码,但在逐步执行时没有得到预期的结果:
- 我的代码
.save()
在整个方法完成之前无法在 MySQL 后端看到。鉴于服务方法是事务性的,这就是我所期望的。 .save()
在服务方法完成之前,我还有其他可以在 MySQL 中看到的调用代码。我不明白这一点,我不明白这和 1 之间的差异。- 我还有更多使用
groovy.sql.Sql
插入数据库的代码。我猜这是在 Grails 事务处理之外,所以在方法结束之前提交的事实是有道理的。我可以让 Grails 在事务中管理这个吗?
请消除我的假设中的任何错误。以下是一些相关代码:
主要服务方式
public void updateDb(Date date) {
// Create the results
if (createResults() > 0) {
createA()
createB()
}
}
创建一个
A a = new a()
a.user = user
a.week = week
a.save()
创建B
userWeek = new UserWeek(user: user)
userWeek.number = 1
userWeek.save(flush: true)
创建结果
String insert = "insert into ..."
Sql sql = new Sql(dataSource)
sql.execute(insert)
我添加flush:true
使其刷新,但我现在明白只是刷新休眠但实际上不提交事务,因为它是事务性的。我究竟做错了什么?