5

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

我正在尝试使用 afterInsert(首先确保计算正确)和 afterUpdate 来做到这一点。

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

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

我现在得到的例外是:

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

GORM 事件是为更简单的用例设计的吗?我很想得出结论,修改你正在保存的对象不是要走的路。

4

2 回答 2

3

您使用的是 1.2.0+ 吗?

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

干杯

于 2010-03-05T03:14:17.927 回答
2

有什么理由反对使用beforeInsertandbeforeUpdate而不是afterInsertand afterUpdate

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

于 2010-03-05T01:36:08.127 回答