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

时间:2018-04-02 19:53:36

标签: grails gorm

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

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

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

Major major = Major.findByCode("ACAA");
major.major = "NEW VALUE";
println("Is dirty? "+ major.dirty);  //Is dirty? true

这有什么原因不起作用?

Grails 3.3.1

GORM 6.1.6

2 个答案:

答案 0 :(得分:5)

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

def update(String newVal) {
    setMajor(newVal)
}

作为参考,请参阅the new dirty checking implementation的GORM升级说明。

答案 1 :(得分:0)

该方法不需要标记为瞬态。如果您有一个名为transient的方法,则通常会使用getThing()属性,因此不会将其解释为需要保留的属性thing

只需从transients列表

中删除该字段即可

http://docs.grails.org/3.3.1/ref/Domain%20Classes/transients.html