我有一个域对象,它保存基于作为同一域对象属性的参数的计算结果。我想确保任何时候参数被用户更改,它都会重新计算并正确保存到数据库中。
我正在尝试使用 afterInsert(首先确保计算正确)和 afterUpdate 来做到这一点。
然而,由于我的计算试图修改对象本身,它不起作用 - 抛出各种休眠异常。
我试图将 afterUpdate 代码放入一个事务中,但这没有帮助。恐怕我在这里遇到了循环依赖问题。
我现在得到的异常(exception)是:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [esc.scorecard.PropertyScorecard#27]
GORM 事件是为更简单的用例设计的吗?我很想得出结论,修改您正在保存的对象不是要走的路。
最佳答案
您使用的是 1.2.0+ 吗?
如果是,您可以在事件闭包中使用 .withNewSession 来避免休眠困惑。
干杯
李
关于grails - 在 AfterInsert/AfterUpdate 中修改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382573/