Менеджер сущностей не является потокобезопасным.Использование EntityManager в транзакциях, управляемых контейнером, - это нормально, но здесь вы сами управляете и EntityManager, и транзакцией.Кроме того, менеджер сущностей является статическим, поэтому вы эффективно используете его для различных запросов, которые вы можете получить от контроллера.Входящий вызов будет выполнять запрос на обновление, который вызовет сброс.
Я заметил, что во время вашего initEntityManager вы меняете статический экземпляр entityManager на новый.Как насчет старой ссылки, которая может использоваться другим потоком?
Выполните следующие действия:
- Удалите полностью ваш метод initEntityManager
- Удалите частный статический EntityManager entityManager;
- Сделайте ваш метод Utils.getEntityManager ();Для создания нового EntityManager
Альтернативное решение должно заключаться в том, чтобы Spring или ваш контейнер, если вы используете контейнер, управляли своими транзакциями.Создайте сервис, аннотируйте его атрибутом @Transaction и заставьте Spring / Container внедрить в него EntutyManager или просто используйте репозитории spring-data.