Ich habe einige Änderungen im Code vorgenommen, aber sie haben keine Auswirkungen. Kann mir bitte jemand helfen, das zu klären. Danke im Voraus.
Versuchen Sie zu entfernen em.getTransaction().begin();em.getTransaction().commit();em.flush();em.clear();em.close(); Es sollte bis zum Frühjahr dauern, Ihre Transaktion zu verwalten
– kamil
13. September 2014 um 9:15 Uhr
Danke für die Antwort, die ich mit dem, was Sie vorgeschlagen haben, versucht habe, aber es gibt keine Änderung.
– Benutzer41498
13. September 2014 um 10:45 Uhr
Hibernate JPA (Spring Data JPA) mit Mongo? Ich glaube nicht, dass es funktionieren wird – Mongo, das NoSQL ist, entspricht nicht den ACID-Eigenschaften. spring-data-mongodb ist etwas, das Sie verwenden sollten.
– balboa_21
13. April 2018 um 7:21 Uhr
Zeichnete Corbin
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 aus einem Persistenz-EntityManager erstellt, um ein Update durchzuführen.
verursacht durch: javax.persistence.TransactionRequiredException: Ausführen einer Aktualisierungs-/Löschabfrage
Viele Lösungen schlagen vor, @Transactional zu Ihrer Methode hinzuzufügen. Allein dies hat den Fehler nicht geändert.
Einige Lösungen schlagen vor, den EntityManager nach a zu fragen EntityTransaction damit Sie beginnen und sich verpflichten können. Dies wirft einen weiteren Fehler:
verursacht durch: java.lang.IllegalStateException: Es ist nicht erlaubt, eine Transaktion auf einem gemeinsam genutzten EntityManager zu erstellen – verwenden Sie stattdessen Spring-Transaktionen oder EJB CMT
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().
Haben @Transactional die Methode dekorieren und dann aufrufen joinTransaction() auf dem EntityManager-Objekt kurz vor dem Aufruf query.executeUpdate() und meine native Abfrageaktualisierung funktionierte.
Ich hoffe, dies hilft jemand anderem, der dieses Problem hat.
Für diejenigen, die dies lesen, um joinTransaction aufzurufen, tun Sie em.joinTransaction(); (wobei em Ihr EntityManager-Objekt ist) (Außerdem ist eine der Schreibweisen der Funktion in der obigen Antwort schlecht, weshalb Sie in Eclipse die roten Schnörkel erhalten, wenn Sie einfach kopieren/einfügen. Stattdessen können Sie kopieren/ Fügen Sie den Code hier in diesen Kommentar ein.)
– Michael Tontschew
9. April 2015 um 15:29 Uhr
Bei der dritten Lösung erhalte ich diesen Fehler: org.springframework.dao.InvalidDataAccessApiUsageException: No local transaction to join; Die verschachtelte Ausnahme ist javax.persistence.TransactionRequiredException: Keine lokale Transaktion zum Beitreten
– Schilan
26. März 2019 um 13:51 Uhr
Ich habe stattdessen die Factory verwendet und in jeder Methode erhalte ich den entityManager und handhabe die Transaktion manuell mit transaction.begin und commit() EntityManager entityManager = entityManagerFactory.createEntityManager();
– Schilan
26. März 2019 um 13:57 Uhr
Dies sollte als Antwort akzeptiert werden, wenn Sie mit nativen Abfragen spielen, müssen Sie dies tun entityManager.joinTransaction();
– Danyal Sandeelo
26. Januar 2020 um 12:18 Uhr
Ich war so blind! Danke für diesen Rat … Ich habe nur die @Transactional-Anmerkung vergessen
– HerTesla
4. Februar 2020 um 14:00 Uhr
Benutzer-8017771
In meinem Fall hatte ich das falsche @Transactional importiert.
Ich habe es mit beiden versucht (eins nach dem anderen) und es hat mit beiden funktioniert. Die verwendete Spring-Version war 2.2.5.RELEASE. Ich habe den Frühling im Code gelassen.
– xbranko
3. November 2021 um 2:12 Uhr
Satja P
Ich habe auch das gleiche Problem, wenn ich mit Hibernate und Spring Jpa Data Repository arbeite. Ich habe vergessen zu platzieren @Transactional auf Spring Data Repository-Methode.
Es funktioniert für mich nach dem Kommentieren mit @Transactional.
Das hat mir geholfen … Ich brauchte sowohl “@Transactional” als auch “@Modifying” für die JPA-Repository-Methode. Es schien nicht genug zu sein, dies nur in meiner Dienstmethode (die das JPA-Repository aufruft) zu haben.
– Markus Müller
18. Mai 2017 um 15:40 Uhr
DAS HAT MIR GEHOLFEN. @Transactional war auch für die JPA DAO Repository-Methode erforderlich! Nicht zu fassen! Du bist ein Lebensretter, Satya P!!
– Gen b.
16. Dezember 2017 um 20:23 Uhr
Einverstanden, dies ist erforderlich, wenn @Modifing-Abfragen verwendet werden.
– sinedsem
23. September 2018 um 10:50 Uhr
Chetan Verma
Aus der Konfigurations-XML ist klar, dass Sie eine frühlingsbasierte Transaktion verwenden werden. Bitte stellen Sie sicher, dass der Import, den Sie verwenden, für @Transactional ist “org.springframework.transaction.annotation.Transactional”
in deinem Fall könnte es sein “javax.transaction.Transaktional”
Ich habe diese Ausnahme erhalten, als ich versuchte, eine Massen-UPDATE-Abfrage in einem Entitätsmanager ohne JTA (d. h. ressourcenlokal) in Java SE auszuführen. Ich hatte einfach vergessen, meinen JPQL-Code einzufügen
em.getTransaction().begin();
und
em.getTransaction().commit();
Ich habe den gleichen Fehler.
Ich habe gerade die hinzugefügt @Transaktion Anmerkung von javax.transaction.Transaktional auf die Methode.
Aktualisieren:
Ich würde die Verwendung von Spring empfehlen @Transactional Anmerkung von org.springframework.transaction.annotation.Transactional;
Shahid Hussein Abbasi
Die Verwendung von @Modifying und @Transaction hat mich behoben
@Modifying @Query(value=”DELETE FROM lock WHERE user_id = ?1″ ,nativeQuery=true) void deleteByUserId(Long userId);
@Service @Transaktional
12981400cookie-checkTransactionRequiredException Ausführen einer Aktualisierungs-/Löschabfrageyes
Versuchen Sie zu entfernen
em.getTransaction().begin();em.getTransaction().commit();em.flush();em.clear();em.close();
Es sollte bis zum Frühjahr dauern, Ihre Transaktion zu verwalten– kamil
13. September 2014 um 9:15 Uhr
Danke für die Antwort, die ich mit dem, was Sie vorgeschlagen haben, versucht habe, aber es gibt keine Änderung.
– Benutzer41498
13. September 2014 um 10:45 Uhr
Hibernate JPA (Spring Data JPA) mit Mongo? Ich glaube nicht, dass es funktionieren wird – Mongo, das NoSQL ist, entspricht nicht den ACID-Eigenschaften. spring-data-mongodb ist etwas, das Sie verwenden sollten.
– balboa_21
13. April 2018 um 7:21 Uhr