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

时间:2011-01-21 23:45:08

标签: hibernate grails

我刚开始使用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()
  }
}

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

由于

2 个答案:

答案 0 :(得分:30)

默认情况下不会抛出任何异常。

如果在验证阶段发生错误,则注入Domain类的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-app / conf / Config.groovy 中将grails.gorm.failOnError设置为true

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

我建议你阅读this article

答案 1 :(得分:4)

要使save()来电RuntimeException,您可以使用item.save(failOnError:true)。但您也可以检查save()方法的返回值。如果它是假的,那就意味着发生了错误。

if (item.save()) {
   //succeeded
}
else  {
   //not succeeded
}