Grails域类属性更改未标记为Dirty

Ray*_*uin 2 grails grails-orm

我的域类中有一个临时方法,它将更新类的属性.当我使用此方法时,类不会标记为脏并且不会保存.

class Major {
    String code
    String major

    static transients = ['update']

    def update(String newVal) {
        major = newVal
    }
}

Major major = Major.findByCode("ACAA");
major.update("NEW VALUE");
println("Is dirty? "+ major.dirty);  //Is dirty? false
Run Code Online (Sandbox Code Playgroud)

当我在方法之外更新属性时,它按预期工作,我可以保存

Major major = Major.findByCode("ACAA");
major.major = "NEW VALUE";
println("Is dirty? "+ major.dirty);  //Is dirty? true
Run Code Online (Sandbox Code Playgroud)

有什么理由不起作用吗?

Grails 3.3.1

GORM 6.1.6

MW.*_*MW. 5

错误在于更新功能.它需要显式调用这样的setter:

def update(String newVal) {
    setMajor(newVal)
}
Run Code Online (Sandbox Code Playgroud)

有关新的脏检查实现的参考,请参阅GORM升级说明.