Изменение объекта в AfterInsert / AfterUpdate - PullRequest
5 голосов
/ 04 марта 2010

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

Я пытаюсь сделать это с 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 ]

3 голосов
/ 05 марта 2010

Вы используете 1.2.0 +?

Если это так, вы можете использовать .withNewSession в закрытиях событий, которые должны избегать спящего хаоса.

ура

Lee

2 голосов
/ 05 марта 2010

Есть ли основания против использования beforeInsert и beforeUpdate вместо afterInsert и afterUpdate?

Если нет, переключение на обработчики событий before* должно решить вашу проблему

...