Grails 正在创建域类的新实例,但未保存

Grails 正在创建域类的新实例,但未保存,grails,gorm,Grails,Gorm,我不想保存一个编辑过的域类,而是想用我所做的更改创建它的一个新实例 def update = { def VariantInstance = Variant.get(params.id) VariantInstance.properties = params def NewVariantInstance = new Variant() //Now Assign Variant Instance new Values

我不想保存一个编辑过的域类,而是想用我所做的更改创建它的一个新实例

def update =
{
        def VariantInstance = Variant.get(params.id)
        VariantInstance.properties = params
        def NewVariantInstance = new Variant()
        //Now Assign Variant Instance new Values
        NewVariantInstance.Name = VariantInstance.Name
        NewVariantInstance.LocationID = VariantInstance.LocationID
        NewVariantInstance.aliases = VariantInstance.aliases
        NewVariantInstance.closeToBoundary = VariantInstance.closeToBoundary


        if (VariantInstance) {
        if (!VariantInstance.hasErrors() && !NewVariantInstance.hasErrors()) {
            println("no errors")
            try {
            NewVariantInstance.save()
            }
            catch (Exception ex)
            {
                println(ex.toString())
            }


            flash.message = "${message(code: 'default.updated.message', args: [message(code: 'Variant.uniqueIdentifyingName', default: 'Variant'), VariantInstance.id])}"
            redirect(action: "list")
        }

}

但是,当我运行此程序时,A)不会保存新版本,B)NewVariantInstance没有id。想法

您的
VariantInstance
NewVariantInstance
从未经过验证,因此
hasrerrors()
将始终返回false。你需要从

!VariantInstance.hasErrors() && !NewVariantInstance.hasErrors()


很可能
NewVariantInstance
有验证错误,因此
save()
不成功。

您的变量名很奇怪。在Java中,通常使用大写的第一个字母作为类名,但使用小写的变量名。这有助于区分静态方法调用和实例方法调用。
VariantInstance.validate() && NewVariantInstance.validate()