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

时间:2011-03-29 13:13:50

标签: validation grails gorm

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

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

非常感谢你!

3 个答案:

答案 0 :(得分:2)

没有你的代码就很难说,但我假设你没有任何限制,所以你不要指望任何问题。但是对于所有字段都有一个隐式的非空约束,除非你用nullable: true覆盖它,这可能是失败的原因。

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

答案 1 :(得分:0)

我猜你在Person Model类中添加了一个名为id的字段。通常Grails会为你做,所以你不必添加它

答案 2 :(得分:0)

实际上,您不需要在validate()之前致电save(),因为save()会在保存对象之前隐式调用validate。你可以这样做:

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

关于问题的原因,我认为不知道你的域名对象是不可能的。