我正在尝试修复我的应用程序的问题,其中我的某个域类中的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
?
答案 0 :(得分:1)
beforeUpdate
方法仅在实际更新对象时触发,您可能会看到的是,当只提交一个参数时,您的域实例处于无效状态且不会验证,因此永远不会更新。你可能想要解决的问题是beforeValidate
方法。
答案 1 :(得分:1)
您问题的简短回答是:
除非域类中的某个属性值发生更改,否则 beforeUpdate
将不会触发。
在您的情况下,beforeUpdate
未被调用,因为Organisation
的任何属性都没有更改。
在这种情况下,我唯一能想到的就是更改您的域模型以允许Location
了解它拥有Organisation
并手动调用beforeUpdate
来自Location
beforeUpdate
。尽管如此,这种感觉很糟糕,闻起来很糟糕。