我有一个grails域对象,我验证然后保存:
if(foo.hasErrors()) {
transactionStatus.setRollbackOnly()
respond foo.errors, view: 'create'
return
}
foo.save flush:true, failOnError:true
println(foo)
保存时没有给出错误。但是当我调用println时,它说我的对象未保存。但是,如果我检查数据库,它确实一直存在。有什么我可以检查告诉我为什么grails告诉我它没有保存。 grails版本是3.0.9。
经过更多测试后,看起来它与我在域映射中指定密钥的方式有关。
static mapping = {
version false
autoTimestamp false
id name:'foo_id', generator:'increment'
}
如果我删除了id字段并让Grails默认处理它,那么对象会被正确保存。如果我重新添加id字段,则会出现上述问题。这有什么理由吗?
答案 0 :(得分:0)
我不会太关注toString()
的格式。您使用save
调用failOnError: true
,因此可以安全地假设如果持久性失败则会抛出异常。如果未指定此参数,则可以检查持久性是否成功
if (foo.save()) {
println 'it worked'
} else {
println 'if failed'
}
答案 1 :(得分:0)
尝试
foo = foo.save flush:true, failOnError:true
println(foo)