Подтвердить что ты не робот

Почему GORM не сохраняет мой объект?

Если я запустил этот код в консоли Grails:

def p = new Post(title: "T");
p.save(flush: true); // or p.save();

Post.count();

GORM не выбрасывает никаких исключений, но данные не сохраняются в моей БД. Что я делаю неправильно?

4b9b3361

Ответ 1

Вероятно, у вас есть ограничение ограничений. Добавьте failOnError: true к вашим параметрам метода сохранения. Тогда вы получите исключение, когда ваше сохранение завершится неудачно. (В качестве альтернативы вы можете проверить возвращаемое значение из save, и если оно ложно распечатывает p.errors.allErrors().)

Проверка и сохранение выполняются вместе. Если вы проверяете данные, переданные пользователем, которые были привязаны к некоторому объекту домена, то для проверки того, что сбой сохранения из-за неправильного ввода, идиоматическая задача - проверить возвращаемое значение save; отказ из-за недопустимого ввода не является исключительным поведением. Если вы хотите сохранить содержимое объекта и хотите, чтобы возникло исключение, если есть проблема, используйте failOnError.

Подробнее о том, почему они спроектировали GORM, чтобы вы это сделали, см. в этой статье.

Ответ 2

Вероятно, какое-то ограничение на Post нарушается и, следовательно, объект не сохраняется. Обратите внимание, что поведение GORM по умолчанию заключается не в том, чтобы выбросить неудавшееся сохранение. Вам нужно либо вызвать его, как

p.save(flush: true, failOnError: true);

Или измените поведение глобально, добавив

grails.gorm.failOnError=true

для вашего Config.groovy