Grails 域 class 属性 更改未标记为脏
Grails domain class property change is not flagged as Dirty
我的域 class 中有一个瞬态方法,它将更新 class 的 属性。当我使用此方法时,class 未标记为脏且不保存。
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
该方法不需要标记为瞬态。如果您有一个名为 getThing()
的方法,通常会使用 transient
属性,因此它不会被解释为需要保留的 属性 thing
。
只需从 transients
列表中删除该字段
http://docs.grails.org/3.3.1/ref/Domain%20Classes/transients.html
错误出在更新函数上。它需要像这样显式调用 setter:
def update(String newVal) {
setMajor(newVal)
}
如需参考,请参阅 the new dirty checking implementation 的 GORM 升级说明。
我的域 class 中有一个瞬态方法,它将更新 class 的 属性。当我使用此方法时,class 未标记为脏且不保存。
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
该方法不需要标记为瞬态。如果您有一个名为 getThing()
的方法,通常会使用 transient
属性,因此它不会被解释为需要保留的 属性 thing
。
只需从 transients
列表中删除该字段
http://docs.grails.org/3.3.1/ref/Domain%20Classes/transients.html
错误出在更新函数上。它需要像这样显式调用 setter:
def update(String newVal) {
setMajor(newVal)
}
如需参考,请参阅 the new dirty checking implementation 的 GORM 升级说明。