当我在创建新的域对象并调用保存命令后,它失败并返回一个对象的id为空的错误!但是我的域的id会自动生成数据库序列,所以我没有将Id值传递给它。我该如何解决它? 这里是我的代码:Grails:在创建新对象时验证域对象失败
if (person.validate()) { // It is always false here
person.save()
} else {
// something here
}
非常感谢!
当我在创建新的域对象并调用保存命令后,它失败并返回一个对象的id为空的错误!但是我的域的id会自动生成数据库序列,所以我没有将Id值传递给它。我该如何解决它? 这里是我的代码:Grails:在创建新对象时验证域对象失败
if (person.validate()) { // It is always false here
person.save()
} else {
// something here
}
非常感谢!
我想你在Person模型类中添加了一个名为id的字段。通常情况下Grails将做到这一点给你,让你不必将它添加
其实,你并不需要save()
之前调用validate()
,因为save()
隐式调用validate
保存对象之前。你可以这样做:
if (person.save(flush:true)) {
// Report success
} else {
// Report error
person.errors.each {
println it
}
}
关于你的问题的原因,我认为不知道你的域对象是不可能的。
没有你的代码很难说,但我假设你没有限制,所以你不期待任何问题。但是,除非用nullable: true
覆盖它,否则所有字段都有一个隐含的非空约束,因此可能是失败。
id为空的原因是它只在成功呼叫save()
后才分配。
发布人员的实现和实例将有助于回答此问题。 – 2011-03-29 13:28:31