LINUX.ORG.RU

No EntityManager with actual transaction available for current thread

 , , ,


0

1

Имеется приложение (spring-boot, spring-data-jpa) в одном из бинов которого я хочу создать с помощью EntityManager пару сущностей. В результате получаю исключение «No EntityManager with actual transaction available for current thread - cannot reliably process ‘persist’ call» при вызове persist. Сохранение через JpaRepository при этом работает корректно. Метод, в котором происходит вызов проаннотирован @Transactional. Не подскажите, с чем это может быть связано? Репозиторий: https://github.com/popov-aa/spring-boot-test



Последнее исправление: popov-aa (всего исправлений: 1)
Ответ на: комментарий от slyjoeh

Понимаю, что типичная, но причину так и не смог найти самостоятельно. @EnableTransactionManagement не требуется, ибо spring-boot уже позаботился, бины распечатал в консоль, transactionManager имеется. Что еще предположить не знаю. При этом запрос данных через persistentContext работает корректно.

popov-aa
() автор топика

Внутри @PostConstruct не будет работать @Transactional, поскольку за наворачивание @Transactional отвечает BeanPostProcessor в фазе postProcessAfterInitialization, а @PostConstruct (он же init-method) вызывается между postProcessBeforeInitialization и postProcessAfterInitialization - т.е. до появления прокси, отвечающего за декларативную транзакцию.
А через репозиторий, очевидно, сработает, т.к. это отдельный бин, созданный и настроенный раньше текущего вызова.
Нужно или выносить код из инит-метода, или мутить вручную транзакцию.
См. https://youtu.be/U8MtGYa04v8?t=1934

Nirvandil
()
Ответ на: комментарий от slyjoeh

и как же спрингу его проксировать, если он private?

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

popov-aa
() автор топика
Ответ на: комментарий от Nirvandil

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

popov-aa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.