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



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

// 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扩展基类的域将无法通过。如何修复此行为?

编辑:我正在使用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
}

相关内容

  • 没有找到相关文章

最新更新