Почему Grails не уведомляет меня об ошибке при сохранении объекта домена? - PullRequest
18 голосов
/ 22 января 2011

Я только начинаю с Grails, и вот первый выпуск.

Я потратил несколько часов, чтобы выяснить, что объект домена нельзя вставить в БД, пока не будут заполнены все его свойства.

class Item {
  String title
  String link
}

class ItemController {
  def fetch = {
    def item = new Item()
    item.title = "blabla"
    // no value for "link"
    item.save()
  }
}

выглядит логично, но почему так тихо пропускается? Могу ли я что-то настроить для получения исключений в таких случаях?

Спасибо

Ответы [ 2 ]

31 голосов
/ 22 января 2011

По умолчанию исключение не выдается.

Метод save(), внедренный в классы домена, возвращает false, если на этапе проверки произошла ошибка.Классический пример кода для проверки сохранения / обновления класса домена:

if (!myDomainObj.save()) {
   log.warn myDomainObj.errors.allErrors.join(' \n') //each error is an instance of  org.springframework.validation.FieldError    
}

Если вам нужно исключение для определенного класса домена, используйте:

myDomainObj.save(failOnError: true)

и исключениядля проверки будут сбои.

Если вы хотите создать исключение для КАЖДОГО класса домена, просто установите grails.gorm.failOnError на true в grails-app / conf / Config.groovy

Будьте осторожны: все свойства домена имеют неявное ограничение nullable: false.

Я рекомендую вам прочитать эту статью .

4 голосов
/ 22 января 2011

Чтобы ваш save() вызов бросил RuntimeException, вы можете использовать item.save(failOnError:true). Но вы также можете проверить возвращаемое значение метода save (). Если это неверно, значит, что-то случилось не так.

if (item.save()) {
   //succeeded
}
else  {
   //not succeeded
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...