我正在尝试将一个域对象的属性复制到另一个类似的域对象(基本上将已退役的数据从存档集合移动到活动的对象)。但是,当我尝试使用手动输入的id保存时,保存实际上不会将任何内容放入集合中。
def item = new Item(style: "631459")
item.id = new ObjectId("537da62d770359c2fb4668e2")
item.save(flush: true, validate: false, failOnError:true)
failOnError不会抛出异常,看起来保存工作正常。此外,如果我在item.save上打印它将返回正确的ID。我认为您可以在域对象上放置特定的ID是错误的吗?
答案 0 :(得分:2)
您可以将id生成器设置为“已分配”,这样您就可以将所需的值和将要保存的值一起保存。
class Item {
...
static mapping = {
id generator:'assigned'
}
}
答案 1 :(得分:1)
标识符 id 是一个有点敏感的名称。如果你检查你的dbconsole,你会发现即使没有询问,GORM也为你提供了一个。当您自己使用该名称时,会发生混淆。 Grails会用println的东西尊重你,但是GORM对 id 如何被初始化和存储有了最后的说法,而且它当时没有听你的。
您可以将 id 重命名为this post中的其他内容,也许您可以自己使用名称 id 。否则,我建议将 id 留给GORM,并为您的旧密钥设置自己的标识符。无论如何,您都无法检索数据,并且不会出现性能问题。