圣杯保存而不更改属性之前不会触发更新



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

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

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

谢谢

我有一个叫做circle的域类,它通过从其他叫做Measurement的域类的集合中取平均值来计算它的一些属性的值,所以如果它的任何一个Measurement被更新了,那么circle也应该被更新。

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

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

正如我在评论中建议的那样,你可能最好在你的测量类上实现一个afterUpdate来定位和更新任何受影响的圆圈。这样,您可以封装调用以重新计算那里的平均值(我假设这会修改Circle的属性,从而将其标记为"dirty",从而允许您持久化它)。

最新更新