Почему GORM не сохраняет мой объект? - PullRequest
17 голосов
/ 07 февраля 2012

Если я выполню этот код в консоли Grails:

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

Post.count();

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

Ответы [ 2 ]

35 голосов
/ 07 февраля 2012

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

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

Подробнее об обосновании того, почему они разработали GORM, так что вам нужно сделать это , см. Эту статью .

11 голосов
/ 07 февраля 2012

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

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

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

grails.gorm.failOnError=true

на ваш Config.groovy

...