是否可以为 grails 域对象保存一个特定的 id?

Is it possible to save a specific id for a grails domain object?

我正在尝试将一个域对象的属性复制到另一个类似的域对象(基本上是将退休数据从存档集合移动到活动集合)。但是,当我尝试使用手动输入的 ID 进行保存时,保存实际上不会将任何内容放入集合中。

def item = new Item(style: "631459")
item.id = new ObjectId("537da62d770359c2fb4668e2")
item.save(flush: true, validate: false, failOnError:true)

failOnError 没有抛出异常,看起来保存工作正常。此外,如果我在 item.save 上打印,它将 return 正确的 ID。我认为您可以在域对象上放置特定的 ID 是不是错了?

标识符 id 是一个使用起来有些敏感的名称。如果您检查您的 dbconsole,您会发现 GORM 甚至没有询问就为您提供了一个。当您为自己使用该名称时,就会发生混淆。 Grails 会用 println 的东西尊重你,但 GORM 对 id 如何初始化和存储有最终决定权,它不会听你的。

您可以将 id 重命名为您在 this post 中看到的其他名称,也许您可​​以使用名称 id 为自己。否则,我建议将 id 留给 GORM,并为您的旧密钥使用您自己的标识符。无论如何,您都不会在检索数据时遇到问题,也不会有性能问题。

您可以将 ID 生成器设置为 'assigned',这样您就可以输入您想要的值,并将与该值一起保存。

class Item {

...

    static mapping = {
        id generator:'assigned'
    }
}