beforeUpdate 中更改的字段未保留

Fields changed in beforeUpdate not persisted

在我的 Grails 3.1.14 应用程序中,我有一个域 class:

class MyDomain {

  String text

  def beforeInsert() { beforeUpdate() }

  def beforeUpdate() {
    text = changeTextBasedOnOtherFields()
    println ">>> $text"
    true
  }
}

在控制器中,实例保存为 myDomain.save flush:true

问题是,text 属性 被保存忽略了,尽管我可以在控制台中看到带有正确值的 println 输出。

如果我把文本更改代码放在保存前面:

myDomain.text = changeTextBasedOnOtherFields()
myDomain.save flush:true

那么它就像魅力一样!

有什么解谜的方法吗?

这似乎是一个 GORM 陷阱。

而不是在拦截器方法中使用 property,应该使用 setter:

def beforeUpdate() {
  setText changeTextBasedOnOtherFields()
  true
}