Grails没有为数据库对象生成id。我用相应的域类创建了对象。现在,如果我调用save(flush:true),我会在...中获得null id。
但是,不应该刷新生成id?
答案 0 :(得分:2)
你确定它真的已经保存了吗,这通常意味着有错误所以你需要捕获它并将其转发回来或其他什么。 你应该能够通过
看到错误if (!object. save(flush:true)) {
// throw new RuntimeException("something went wrong");
//println "object errors ${object.errors} //.allErrors}
//or
//object.errors.reject('object.failed.saved', '')
}
有时甚至是更嵌套的失败,可以像这样被抓住
try {
subobject.removeFromElements(object)
subobject.save(flush:true)
} catch (Exception e) {
throw new ValidationException('failed.message',subobject.errors)
}
如果你首先尝试第一种方法来查看错误是否仍然没有尝试通过在整个保存块中包装try catch以查看其他组件是否导致您的问题作为测试。在那之间你回答
答案 1 :(得分:1)
您是否尝试在映射中添加以下内容?
静态映射= {
id(generator: "assigned")
}
答案 2 :(得分:0)
我也面临着同样的问题,Flush无法生成id,因为如果两者之间有任何会话中断。在这种情况下,它会立即执行操作,您可以使用save()方法。
查看下面的内容可能会有所帮助- https://www.slideshare.net/JonasWitt1/understanding-database-transactions-and-hibernate-sessions-in-grails