Nie jestem pewien, czy to pomoże w Twojej sytuacji (to znaczy, czy nadal istnieje), jednak po przeszukaniu sieci w poszukiwaniu podobnego problemu.
Tworzyłem natywne zapytanie z EntityManager trwałości, aby przeprowadzić aktualizację.
Query query = entityManager.createNativeQuery(queryString);
Otrzymuję następujący błąd:
spowodowane przez:javax.persistence.TransactionRequiredException:Wykonanie zapytania o aktualizację/usunięcie
Wiele rozwiązań sugeruje dodanie @Transactional do metody. Samo zrobienie tego nie zmieniło błędu.
Niektóre rozwiązania sugerują poproszenie EntityManager o EntityTransaction
byś mógł sam wywołać begin i commit. To generuje kolejny błąd:
spowodowane przez:java.lang.IllegalStateException:Niedozwolone tworzenie transakcji na współdzielonym EntityManager - zamiast tego użyj transakcji Spring lub EJBCMT
Następnie wypróbowałem metodę, o której większość witryn twierdzi, że służy do zarządzania jednostkami zarządzanymi przez aplikację, a nie do zarządzania kontenerami (co uważam za Spring) i była to joinTransaction()
.
Posiadanie @Transactional
dekorowanie metody, a następnie wywołanie joinTransaction()
na obiekcie EntityManager tuż przed wywołaniem query.executeUpdate()
i moja natywna aktualizacja zapytania zadziałała.
Mam nadzieję, że pomoże to komuś, kto ma ten problem.