保存grails对象的第二个版本

时间:2013-02-28 20:09:28

标签: grails gorm

我想做的一件事就是对我们数据库中的条目进行版本控制。在我的更新方法中,我想保存一个较新的第二个版本的对象。例如

def update = {
    def VariantInstance = Variant.get(params.id)
    def NewVariantInstance = VariantInstance
    NewVariantInstance.properties = params
    if (VariantInstance) {
        if (!VariantInstance.hasErrors()) {
            VariantInstance.save()
            NewVariantInstance.save()

            flash.message = "${message(code: 'default.updated.message', args: [message(code: 'Variant.uniqueIdentifyingName', default: 'Variant'), VariantInstance.id])}"
            redirect(action: "list")
        }
        else {
            render(view: "edit", model: [VariantInstance: VariantInstance])
        }
    }
    else {
        flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'Variant.uniqueIdentifyingName', default: 'Variant'), params.id])}"
        redirect(action: "list")
    }
}

虽然这会保存当前的,但它不会创建新的。我做错了什么?

1 个答案:

答案 0 :(得分:1)

有两个问题; NewVariantInstance最有可能只是对VariantInstance的引用,因此它取消引用同一个对象。此外,当您执行params赋值时,您还要将VariantInstance中的id字段分配给NewVariantInstance,因此GORM在保存时会看到对象相同。