Транзакция уровня блока Grails с перехватчиком beforeUpdate создает исключение StackOverFlowException - PullRequest
1 голос
/ 14 сентября 2010

Мой класс домена выглядит так:

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 Ответ

1 голос
/ 14 сентября 2010

Имеет ли AuditTrail каскадное отношение к учетной записи? Это может быть причиной проблемы.

Другая вещь, которая может происходить, заключается в том, что сохранение AuditTrail вызывает сброс сеанса, который также сохраняет измененные объекты Account.

Вы пытались использовать afterInsert вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...