Validation Grails:创建新对象时验证域对象失败

Validation Grails:创建新对象时验证域对象失败,validation,grails,gorm,Validation,Grails,Gorm,当我创建一个新的域对象并在验证后调用save命令时,它失败并返回一个错误,即对象的id为null!但是我的域的id将由数据库序列自动生成,所以我没有将id值传递给它。我怎么才能解决它?! 这是我的密码: if (person.validate()) { // It is always false here person.save() } else { // something here } 非常感谢你 我猜您在Person Model类中添加了一个名为id的字段。通常Grail

当我创建一个新的域对象并在验证后调用save命令时,它失败并返回一个错误,即对象的id为null!但是我的域的id将由数据库序列自动生成,所以我没有将id值传递给它。我怎么才能解决它?! 这是我的密码:

if (person.validate()) { // It is always false here
    person.save()
} else {
    // something here
}

非常感谢你

我猜您在Person Model类中添加了一个名为id的字段。通常Grails会为您执行此操作,因此您不必添加它。实际上,您不需要在
save()
之前调用
validate()
,因为
save()
在保存对象之前隐式调用
validate
。您可以这样做:

if (person.save(flush:true)) {
   // Report success
} else {
   // Report error
   person.errors.each {
        println it
   }
}

关于问题的原因,我认为在不知道域对象的情况下是不可能说出来的。

没有代码,很难说出来,但我假设您没有约束,所以您不会期望出现任何问题。但是所有字段都有一个隐式的NOTNULL约束,除非您用
null:true
覆盖它,所以这可能是失败的地方


id为null的原因是,它仅在成功调用
save()
后分配。

发布person的实现和实例化将有助于回答此问题。