Mongodb 更新前更改的字段未持久化

Mongodb 更新前更改的字段未持久化,mongodb,grails,gorm,interceptor,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

在我的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
然后它就像魅力


有什么办法可以解决这个迷雾吗?

这似乎是个难题

在拦截器方法中不应使用
属性
,而应使用
设置器

def beforeUpdate() {
  setText changeTextBasedOnOtherFields()
  true
}

这似乎是一个GORM-gotcha

在拦截器方法中不应使用
属性
,而应使用
设置器

def beforeUpdate() {
  setText changeTextBasedOnOtherFields()
  true
}

我昨天在Grail3.1.9和Mongodb中遇到了同样的问题,我在3.3中也遇到了同样的问题。11@corrego请看下面我的答案,昨天我在Grail3.1.9中与Mongodb遇到了同样的问题,我在3.3中也遇到了同样的问题。11@corrego下面是我的答案