beforeUpdate中更改的字段未保留

时间:2016-11-11 13:32:30

标签: mongodb grails gorm interceptor

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

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

然后它就像魅力一样!

有什么方法可以解决这个错误吗?

1 个答案:

答案 0 :(得分:0)

这似乎是一个 GORM-gotcha。

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

def beforeUpdate() {
  setText changeTextBasedOnOtherFields()
  true
}