2011-03-29 80 views
0

当我在创建新的域对象并调用保存命令后,它失败并返回一个对象的id为空的错误!但是我的域的id会自动生成数据库序列,所以我没有将Id值传递给它。我该如何解决它? 这里是我的代码:Grails:在创建新对象时验证域对象失败

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

非常感谢!

+2

发布人员的实现和实例将有助于回答此问题。 – 2011-03-29 13:28:31

回答

0

我想你在Person模型类中添加了一个名为id的字段。通常情况下Grails将做到这一点给你,让你不必将它添加

0

其实,你并不需要save()之前调用validate(),因为save()隐式调用validate保存对象之前。你可以这样做:

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

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

2

没有你的代码很难说,但我假设你没有限制,所以你不期待任何问题。但是,除非用nullable: true覆盖它,否则所有字段都有一个隐含的非空约束,因此可能是失败。

id为空的原因是它只在成功呼叫save()后才分配。