Ошибка «No transactional EntityManager available» при использовании Spring и Hibernate обычно возникает из-за попытки сохранить объект в методе, который не выполняется в контексте транзакции. www.iditect.com
Несколько возможных причин и способов их устранения:
- Неправильная конфигурация EntityManagerFactory. www.matheusmello.io Нужно проверить, что свойство persistenceXmlLocation в EntityManagerFactory указывает на правильное расположение файла persistence.xml, а bean dataSource правильно настроен с соответствующими свойствами для соединения с базой данных. www.matheusmello.io
- Конфликт зависимостей. qna.habr.com Например, может конфликтовать spring-orm с spring-data-jpa. qna.habr.com
- Отсутствие аннотации @Transactional. www.iditect.com Эта аннотация говорит Spring создать контекст транзакции для метода, что позволяет выполнять операции с базой данных внутри транзакции. www.iditect.com
- Неправильный вызов метода. www.iditect.com Нужно вызывать метод через bean, управляемый контекстом приложения Spring. www.iditect.com Прямой вызов метода на объекте не сработает, так как Spring не сможет управлять контекстом транзакции в этом случае. www.iditect.com
- Проблемы с вложенными транзакциями. www.iditect.com Если ошибка возникает в контексте вложенных транзакций, нужно убедиться, что используются подходящие настройки распространения с @Transactional. www.iditect.com
Для решения проблемы рекомендуется перекомпилировать и запустить приложение, чтобы проверить, устранена ли ошибка. www.matheusmello.io