为什么Grails没有通知我域保存域中的错误?

mku*_*min 18 grails hibernate

我刚开始使用Grails,这是第一个问题.

我花了几个小时才发现域对象无法插入到DB中,直到填充了所有属性.

class Item {
  String title
  String link
}

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

看起来合乎逻辑,但为什么它会如此默默地跳过?在这种情况下,我可以配置一些东西以获得异常吗

谢谢

fab*_*474 31

默认情况下不会抛出异常.

如果在验证阶段发生错误,则save()注入到Domain类的方法将返回false.用于检查域类的保存/更新的经典代码示例是:

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

如果您需要为特定域类设置例外,请使用:

myDomainObj.save(failOnError: true)
Run Code Online (Sandbox Code Playgroud)

并且将抛出验证失败的异常.

如果要为每个域类抛出异常,则只需在grails-app/conf/Config.groovy中设置grails.gorm.failOnErrortrue

注意:所有域属性都有一个隐式nullable: false约束.

我建议你阅读这篇文章.