Как запустить событие изменения свойства только после сохранения объекта в базе данных - PullRequest
0 голосов
/ 21 декабря 2011

Я использую hibernate и spring, и мне нужно реагировать на событие изменения свойства конкретного объекта.Я хотел бы получить событие только после того, как данные сохранены в БД.Есть ли способ сделать это с помощью транзакции?Hibernate предоставляет эту опцию?

Спасибо

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Перехватчики Hibernate или прослушиватели событий - это общий подход к выполнению этого требования.Если вы решите использовать перехватчик, обязательно прочитайте документацию , потому что это может быть сложно.Например, onFlushDirty является отличным местом для обнаружения изменений и ведения журнала аудита, однако:

Обратите внимание, что не все сбрасывания заканчиваются фактической синхронизацией с базой данных, в этом случаеновый currentState будет распространен на объект, но не обязательно (немедленно) в базу данных.

Это означает, что onFlushDirty можно вызывать любое количество раз с точно такими же данными, прежде чем они будут фактически записаны.в базу данных.Чтобы избежать дублирования регистрации в нашем примере, вы можете попробовать кэшировать информацию об изменениях, которые вы хотите зарегистрировать, и записывать их только через postFlush .

0 голосов
/ 21 декабря 2011

Разве вы не можете использовать аспект AfterReturning для этого?Это можно легко сделать с помощью Spring AOP

. Если вам потребуется сделать это с помощью Hibernate, вам придется написать класс, который реализует интерфейс PostUpdateEventListener.Это попросит вас предоставить конкретную реализацию метода onPostUpdate, который предоставит вам объект PostUpdateEvent.получить сущность с помощью event.getEntity () и продолжить.

0 голосов
/ 21 декабря 2011

Это можно сделать с помощью перехватчика Hibernate или прослушивателей событий Hibernate. См. Hibernate Docs для получения дополнительной информации по обоим из них.

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