bindData() 在使用 gorm 继承时正在更改域 ID

bindData() is changing the domain id when using gorm inheritance

我有一个 grails 域 class,它扩展了 src 文件夹中的基础 class,如下所示:

// src/main/groovy/demo/MyBaseClass.groovy
package demo

import grails.gorm.dirty.checking.DirtyCheck

@DirtyCheck
class MyBaseClass {
    String name
}
// grails-app/domain/demo/MyDomain.groovy
package demo

class MyDomain extends MyBaseClass {
    Date birthDate
}

然而,当在控制器中使用bindData时,MyDomainid可以通过请求参数来改变。这可以通过这个失败的测试来检查:

// src/test/groovy/demo/IdDataBindingSpec.groovy
package demo

import grails.web.databinding.DataBinder
import org.grails.testing.GrailsUnitTest
import spock.lang.Specification

class IdDataBindingSpec extends Specification 
        implements GrailsUnitTest, DataBinder {

    void "Bind id to MyDomain is not possible"() {
        given: "A new instance"
            MyDomain myDomain = new MyDomain()
        and: "Request params"
            Map params = [id:5, name:'test']

        when: "Binding data"
            bindData(myDomain, params)

        then: "id is not updated"
            !myDomain.id
        and: "Other params are updated"
            myDomain.name == 'test'
    }
}

任何普通域都可以通过上述测试,但是从 src 扩展基础 class 的域不会。我该如何解决这个问题?

编辑:我正在使用 Grails 3.3.8 和 gorm 6.1

使用gorm继承时,src中的基类必须声明为抽象的,像这样:

// src/main/groovy/demo/MyBaseClass.groovy
package demo

import grails.gorm.dirty.checking.DirtyCheck

@DirtyCheck
abstract class MyBaseClass {
    String name
}