1

我有一个问题,我有一个名为 Cicle 的域类,它通过从名为 Measurement 的其他域类的集合中取平均值来计算其某些属性的值,所以如果更新了它的任何测量值,那么 Cicle 也应该更新.

问题是我在 beforeUpdate 方法中计算平均值,但是如果 Cicle 属性没有更改,则不会触发此方法,并且当 Cicle 在 beforeUpdate 方法中更改其属性时,不会存储更改。

这是正常行为吗?即使属性看起来相同,有没有办法强制保存?我尝试了flush:true,validate:false但没有运气,我是否应该在一直保存之前调用我的方法?或者这是一个错误,我应该告诉 grails?或者是否有我应该实施的最佳实践?

谢谢

4

2 回答 2

2

我有一个名为 Cicle 的域类,它通过从名为 Measurement 的其他域类的集合中取平均值来计算其某些属性的值,因此,如果它的任何测量值被更新,那么 Cicle 也应该被更新。

您是否考虑过将平均值设为瞬态属性?这将允许您仅在需要时完成计算,并节省数据库中的空间。

于 2014-05-02T18:42:54.350 回答
1

这是正常行为。什么都没有被保存的原因是因为没有任何东西被视为“肮脏”或改变。这是 Hibernate 的默认行为,这不是错误。“如果一切都没有改变,那就不要费心去保存任何东西。”

正如我在评论中所建议的那样,您最好在 Measurements 类上实施 afterUpdate 来定位和更新任何受影响的圈子。通过这种方式,您可以封装调用以重新计算那里的平均值(我假设这将修改 Circle 的属性,从而将其标记为“脏”,进而允许您保留它)。

于 2014-05-02T18:32:21.070 回答