Ich bin mir nicht sicher, ob dies Ihrer Situation helfen wird (das heißt, wenn es noch existiert), nachdem ich das Internet nach einem ähnlichen Problem durchsucht habe.
Ich habe eine native Abfrage von einem Persistenz-EntityManager erstellt, um ein Update durchzuführen.
Query query = entityManager.createNativeQuery(queryString);
Ich habe die folgende Fehlermeldung erhalten:
verursacht durch:javax.persistence.TransactionRequiredException:Ausführen einer Aktualisierungs-/Löschabfrage
Viele Lösungen schlagen vor, @Transactional zu Ihrer Methode hinzuzufügen. Dies hat den Fehler nicht geändert.
Einige Lösungen schlagen vor, den EntityManager nach einer EntityTransaction
zu fragen damit Sie begin aufrufen und sich selbst übergeben können. Dies wirft einen weiteren Fehler:
verursacht durch:java.lang.IllegalStateException:Keine Berechtigung zum Erstellen von Transaktionen auf gemeinsam genutztem EntityManager - verwenden Sie stattdessen Spring-Transaktionen oder EJBCMT
Ich habe dann eine Methode ausprobiert, von der die meisten Websites sagen, dass sie zur Verwendung von anwendungsverwalteten Entitätsmanagern und nicht von Containern verwaltet wird (was meiner Meinung nach Spring ist), und das war joinTransaction()
.
@Transactional
haben Dekorieren der Methode und anschließendes Aufrufen von joinTransaction()
auf dem EntityManager-Objekt kurz vor dem Aufruf von query.executeUpdate()
und meine native Abfrageaktualisierung hat funktioniert.
Ich hoffe, das hilft jemand anderem, der dieses Problem hat.