当我创建一个新的域对象并在验证后调用save命令时,它失败并返回一个错误,即object的id为null!但是我的Domain的id会自动由数据库序列生成,所以我没有将Id值传递给它。我怎么解决呢?! 这是我的代码:
if (person.validate()) { // It is always false here
person.save()
} else {
// something here
}
非常感谢你!
答案 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
}
}
关于问题的原因,我认为不知道你的域名对象是不可能的。