代码之家  ›  专栏  ›  技术社区  ›  Jean Barmash

在afterinsert/afterupdate中修改对象

  •  5
  • Jean Barmash  · 技术社区  · 14 年前

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

    我尝试在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 回复  |  直到 14 年前
        1
  •  3
  •   leebutts    14 年前

    你在用1.2.0+?

    如果是,可以在events闭包中使用.withnewsession,这样可以避免休眠混乱。

    干杯

        2
  •  2
  •   fabien7474 Jan Tchärmän    14 年前

    有什么理由不使用 beforeInsert beforeUpdate 而不是 afterInsert afterUpdate ?

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