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

时间:2018-10-12 22:08:43

标签: gorm grails-3.0 grails-3.3

我有一个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时,id的{​​{1}}可以通过请求参数进行更改。可以通过此失败的测试来检查:

MyDomain

任何普通域都将通过上述测试,但是从// 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' } } 扩展基类的域将不会通过。我该如何解决此问题?

编辑:我在Grarm 6.1上使用了Grails 3.3.8

1 个答案:

答案 0 :(得分:0)

使用gorm继承时,src中的基类必须声明为抽象的,如下所示:

src