Grails Transaction Issues

У меня есть сервис Грааля, который помечен как транзакционный, и он делает много вещей.

Я добавляю код в этот метод и не получаю результатов, которые я ожидаю при его прохождении:

  1. У меня есть код, который вызывает .save(), который нельзя увидеть в серверной части MySQL до тех пор, пока весь метод не закончится. Это то, что я ожидаю, учитывая, что метод сервиса является транзакционным.
  2. У меня есть другой код, который вызывает .save(), который МОЖНО увидеть в MySQL до завершения метода сервиса. Я не понимаю этого, и я не понимаю несоответствия между этим и 1.
  3. У меня есть еще больше кода, который использует 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, но теперь я понимаю, что нужно просто смыть спящий режим, но фактически не совершать транзакцию, так как она транзакционна. Что я делаю не так?

5
задан Nathan Tuggy 17 April 2015 в 01:32
поделиться