【问题标题】:Fields changed in beforeUpdate not persistedbeforeUpdate 中更改的字段未保留
【发布时间】:2016-11-11 13:32:30
【问题描述】:

在我的 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

然后它就像魅力一样!

有什么办法可以解开这个谜团?

【问题讨论】:

  • 巧合的是,我昨天在使用 Mongodb 的 Grail 3.1.9 中遇到了同样的问题。
  • 我在 3.3.11 中也遇到了同样的情况
  • @corrego 在下面看到我的答案

标签: mongodb grails grails-orm interceptor


【解决方案1】:

这似乎是一个 GORM 问题。

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

def beforeUpdate() {
  setText changeTextBasedOnOtherFields()
  true
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多