Grails域实例不保存

时间:2016-06-20 20:35:16

标签: grails gorm

我有一个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字段,则会出现上述问题。这有什么理由吗?

2 个答案:

答案 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)