Спецификация JPA немного расплывчата в отношении разграничения транзакций и слушателя (§ 3.5.2):
Обратные вызовы PreUpdate и PostUpdate выполняются до и после операций обновления базы данных до
данные объекта соответственно.
У меня была похожая ситуация, и, насколько я помню, обратный вызов @PostXxxx
иногда выполнялся в правильной транзакции или вообще не выполнялся. Это зависит от того, было ли обновление «промежуточным» сбросом в транзакции или «последним» сбросом перед фиксацией транзакции, и в этом случае обратный вызов происходит после транзакции было зафиксировано (что имеет смысл). 1010 *
Я предлагаю вам попробовать с @PreXxxxx
, который всегда должен быть в транзакции. (Кроме того, если я хорошо помню, единственная проблема с @PreXxxx
состояла в том, что объекту еще не может быть назначен PK, зависит ли это от проблемы, в зависимости от вашего варианта использования.)