Будьте в спящем режиме PostInsertEventListeners - Использование Та же Транзакция, как вставляют?

Я имею, некоторые в спящем режиме код, который выполняет вставку в базу данных, и на завершении той вставки запущен специализированный PostInsertEventListener. (По существу триггер, чтобы гарантировать, что другие записи обновляются соответственно),

То, что я должен сделать, заставляют код в EventListener использовать ту же транзакцию в качестве исходной вставки, так, чтобы, если вставка не фиксирует успешно, EventListener не стрелял.

Я услышал, что можно использовать javax.transaction.Syncronization и Hibernate transaction.registerSyncronization() методы, чтобы сделать это, но нет никаких примеров использования нигде, что я могу найти.

Любая справка ценится.

5
задан Mal 4 March 2010 в 00:22
поделиться

1 ответ

Я не думаю, что это возможно.

Насколько я понимаю, вы хотите выполнить какой-то код только в том случае, если транзакция завершилась успешно (была зафиксирована). Однако, если транзакция зафиксирована, вы не можете делать что-либо еще в той же транзакции, поскольку она завершилась.

Однако вы могли бы использовать PreInsertEventListener, который вызывается внутри транзакции (перед фиксацией). Слушатель событий будет запускать событие, если транзакция завершится неудачно (поскольку мы не знаем, пока транзакция завершится, если транзакция будет успешной), но все, что вы изменяете в слушателе, не будет сохранено в базе данных, если транзакция завершится неудачно. Список слушателей см. На https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/EventListeners.html .

Одно предупреждение. Вы не должны слишком сильно изменять данные в слушателе. Особенно не следует запускать ленивую загрузку коллекций.

3
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: