トランザクションとしてマークされた 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
しましたが、休止状態をフラッシュするだけで、トランザクションであるため実際にトランザクションをコミットしないことを理解しました。私は何を間違っていますか?