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

17

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

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

Post.count();

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

    
задан K Everest 07.02.2012 в 14:59
источник
  • В моем случае у меня была другая часть кода, которая удаляла мою строку, сразу после создания нового ... :( –  Topera 08.12.2016 в 13:09

2 ответа

32

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

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

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

ответ дан Nathan Hughes 07.02.2012 в 15:03
  • +1 для ссылки –  Dónal 07.02.2012 в 15:17
  • Вы также можете использовать 'validate ()' на своем доменном объекте, и если он возвращает false, НЕ НАЙДИТЕ его метод save (). Вместо этого контроллер возвращает сообщение пользователю. –  Salvador Valencia 20.06.2015 в 01:47
  • Что делать, если я устанавливаю failOnError: true, и я не получаю исключений, а объект отмечен как «несохраненный» от Grails? –  Daniil Shevelev 21.06.2017 в 18:45
  • Кроме того, я пытаюсь найти сообщение об ошибке в объектах List of Error. Пока не повезло. –  Daniil Shevelev 21.06.2017 в 18:51
11

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

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

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

grails.gorm.failOnError=true

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

    
ответ дан Stephen Swensen 07.02.2012 в 15:04