Не съм сигурен обаче дали това ще помогне на вашата ситуация (тоест ако все още съществува), след като претърсих мрежата за подобен проблем.
Създавах собствена заявка от постоянен EntityManager за извършване на актуализация.
Query query = entityManager.createNativeQuery(queryString);
Получавах следната грешка:
причинено от:javax.persistence.TransactionRequiredException:Изпълнение на заявка за актуализиране/изтриване
Много решения предлагат добавяне на @Transactional към вашия метод. Само това не промени грешката.
Някои решения предлагат да поискате от EntityManager EntityTransaction
за да можете да извикате begin и да се ангажирате. Това извежда друга грешка:
причинено от:java.lang.IllegalStateException:Не е разрешено да се създава транзакция в споделен EntityManager - вместо това използвайте Spring транзакции или EJBCMT
След това изпробвах метод, за който повечето сайтове казват, че е за използване на управлявани от приложения мениджъри на обекти, а не за управление на контейнери (което според мен е Spring) и това беше joinTransaction()
.
Имате @Transactional
декориране на метода и след това извикване на joinTransaction()
върху обекта EntityManager точно преди извикването на query.executeUpdate()
и моята собствена актуализация на заявката работи.
Надявам се това да помогне на някой друг, който се сблъсква с този проблем.