Вместо использования программной обработки транзакций, артефакт Сервиса позволяет автоматически обрабатывать транзакции. Это обычно приводит к более чистому и более понятному коду.
Вы также можете использовать failOnError: true при сохранении (), чтобы вызвать исключение RuntimeException.
Пример ниже:
class SomeService {
static transactional = false
def serviceMethod() {
def domain1=//Create my domain object to save
def domain2=//Create my domain object to save
domain1.save(failOnError:true)
domain2.save(failOnError:true)
}
}
UPDATE
Я возвращаюсь к этой теме после прочтения ответа на другую тему. Тест интеграции Grails не откатывается
Пожалуйста, убедитесь, что ваш диалект настроен как InnoDB, поскольку таблицы MyISAM не являются транзакционными. Это настроено в вашем Config.groovy
dataSource {
dialect= org.hibernate.dialect.MySQLInnoDBDialect
...
}