У меня есть сервис Грааля, который помечен как транзакционный, и он делает много вещей.
Я добавляю код в этот метод и не получаю результатов, которые я ожидаю при его прохождении:
.save()
, который нельзя увидеть в серверной части MySQL до тех пор, пока весь метод не закончится. Это то, что я ожидаю, учитывая, что метод сервиса является транзакционным..save()
, который МОЖНО увидеть в MySQL до завершения метода сервиса. Я не понимаю этого, и я не понимаю несоответствия между этим и 1.groovy.sql.Sql
для вставки в базу данных. Я предполагаю, что это выходит за рамки обработки транзакций Grails,поэтому тот факт, что это совершается до окончания метода, имеет смысл. Могу ли я получить Grails для управления этим внутри транзакции?Пожалуйста, избавьте меня от любых ошибок в моих предположениях. Вот некоторый релевантный код:
Main Service Method
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
, чтобы сделать его flush, но теперь я понимаю, что нужно просто смыть спящий режим, но фактически не совершать транзакцию, так как она транзакционна. Что я делаю не так?