【问题标题】:Grails GORM beforeUpdate method not invoked未调用 Grails GORM beforeUpdate 方法
【发布时间】:2014-08-03 19:07:44
【问题描述】:

我正在尝试解决我的应用程序的一个问题,即我的一个域类中的 beforeUpdate 方法未被调用。

如果没有直接属于域类的字段被更新,则不会触发beforeUpdate 事件。我想这是有道理的,但是我希望我的 beforeUpdate 方法中的代码即使在只更新我的域类的关联的情况下也能执行。

例如,我的域类看起来像这样:

class Organisation {
    String name
    Location location

    def beforeUpdate() {
        //do some stuff with the location when it's updated
    }
}

如果从表单提交的参数映射包含name 参数,则触发beforeUpdate。如果参数映射只包含location参数,则不是。

即使我只是更新关联,有什么方法可以让 Grails 触发 beforeUpdate

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

    您的问题的简短答案是:

    beforeUpdate 不会触发,除非域类的属性值之一发生更改。

    在您的情况下,beforeUpdate 没有被调用,因为 Organisation 的任何属性都没有更改。

    在这种情况下我唯一能想到的就是更改您的域模型以允许Location 知道它拥有Organisation 并从Location 的@987654328 中手动调用beforeUpdate @。尽管如此,这感觉很老套,而且闻起来很糟糕。

    【讨论】:

    • 你是对的 - 这是一个很好的建议,虽然 location 最初为空。
    【解决方案2】:

    beforeUpdate 方法仅在对象实际更新时触发,您可能看到的是,当仅提交一个参数时,您的域实例处于无效状态且未验证,因此永远不会更新.您可能正在寻找解决问题的方法是 beforeValidate 方法。

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多