修改AfterInsert / AfterUpdate中的对象

时间:2010-03-04 20:42:46

标签: grails gorm

我有一个域对象,它根据属于同一域对象的参数保存计算结果。我想确保用户更改任何时间参数,它会重新计算并正确保存到数据库中。

我正在尝试使用afterInsert(以确保计算首先是正确的)和afterUpdate。

但是,由于我的计算是试图修改对象本身,它不起作用 - 抛出各种hibernate异常。

我尝试将afterUpdate代码放入事务中,但这没有帮助。我恐怕在这里遇到循环依赖问题。

我现在得到的例外是:

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [esc.scorecard.PropertyScorecard#27]

GORM活动是否针对更简单的用例而设计?我很想得出结论,修改你正在保存的对象是不可取的。

2 个答案:

答案 0 :(得分:3)

您使用的是1.2.0 +?

如果你是,你可以在事件闭包中使用.withNewSession来避免休眠混乱。

欢呼声

答案 1 :(得分:2)

是否有任何理由反对使用beforeInsertbeforeUpdate代替afterInsertafterUpdate

如果没有,切换到before*事件处理程序应解决您的问题