是否可以为grails域对象保存特定的ID?

时间:2015-05-21 15:59:06

标签: grails gorm

我正在尝试将一个域对象的属性复制到另一个类似的域对象(基本上将已退役的数据从存档集合移动到活动的对象)。但是,当我尝试使用手动输入的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是错误的吗?

2 个答案:

答案 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,并为您的旧密钥设置自己的标识符。无论如何,您都无法检索数据,并且不会出现性能问题。