Grails使用beforeUpdate拦截器的块级事务会产生StackOverFlowException

时间:2010-09-14 08:52:36

标签: grails

我的域类是这样的:

Class Account {
    String accountNo
    ...
    def beforeUpdate = {
        new AuditTrial(eventName:"update").save()
    }
}

在我的应用程序中,有一个块级事务,如下所示:

def updateAccount = {
    Account.withTransaction { status ->
        def source = Account.get(params.from)
        def dest = Account.get(params.to)

        def amount = params.amount.toInteger() 
        if(source.active) { 
            source.balance -= amount 
            if(dest.active) {
                dest.amount += amount
            } else { 
                status.setRollbackOnly() 
            } 
        } 
    }
}

当我尝试调用此updateAccount方法时,它会产生堆栈溢出异常。似乎是递归调用beforeUpdate方法。

期待您的价值建议来克服这个问题

1 个答案:

答案 0 :(得分:1)

AuditTrail与Account有级联关系吗?这可能会导致问题。

可能发生的另一件事是保存AuditTrail导致会话刷新,这也保存了修改后的Account对象。

您是否尝试过使用afterInsert?