Grails GORM beforeUpdate方法未被调用

时间:2014-06-13 09:10:29

标签: hibernate grails gorm

我正在尝试修复我的应用程序的问题,其中我的某个域类中的beforeUpdate方法未被调用。

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

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

class Organisation {
    String name
    Location location

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

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

即使我只更新关联,有没有办法让Grails解雇beforeUpdate

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您问题的简短回答是:

除非域类中的某个属性值发生更改,否则

beforeUpdate将不会触发。

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

在这种情况下,我唯一能想到的就是更改您的域模型以允许Location了解它拥有Organisation并手动调用beforeUpdate来自Location beforeUpdate。尽管如此,这种感觉很糟糕,闻起来很糟糕。