endet Ich versuche Container verwaltet Transaktion bestehen bleiben, bevor sein Anwendungsbereich istbenötigen Container verwaltet Transaktion mit Nachdruck beharren vor ihrem Umfang
Die Bean-Klasse zu Ende kommt
kommentierte mit entityManager.flush()@TransactionAttribute(TransactionAttributeType.REQUIRED)
Über diesen Link: how we can get JPA EntityManager Flush work habe ich erfahren, dass die Verwendung von entityManager.flush() die Transaktion nicht festschreibt. Dem DBMS werden diese Daten jetzt bekannt sein, andere DB-Sitzungen können es jedoch nicht sehen.
Außerdem habe ich versucht, ein neues Verfahren bean
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
diesen Link how to commit a transaction in EJB? nennen entityManager.flush() in anderen Transaktion deren Umfang innerhalb der neuen Methode bean kommentierten zu erstellen. Dies funktioniert jedoch nicht.
Ich bin auf der Suche nach einem Ansatz, um eine Transaktion zwangsweise zu committen, um ihren bisherigen Status in DB zu erhalten.
Etwas wie:
entityManager.getTransaction().commit();
dies für BMT werden kann CMT aber nicht getan.
Wir können die neuen Daten in persistDataInOwnTransaction() beibehalten, nicht die vorhandenen Daten.Mein Flow ist wie: Schritt 1: - Aktualisieren Sie die gleichen Daten Schritt 2: - Aktualisieren Sie die gleichen Daten step3: - Aktualisieren Sie die gleichen Daten // bis hier step4 gemacht, alle Änderungen in Daten bestehen: - einen externen Anruf tätigen Bevor ich den externen Anruf mache, muss ich diese Daten in der DB persistieren. –
Siehe meine aktualisierte Version. Momentan kann ich das nicht testen, aber "merge" fügt die Daten wieder an den Entity Manager an und sollte die aktualisierten Daten beibehalten. –
Danke! Diese Lösung funktioniert für diese Daten, aber ich muss mehrere unabhängige Entitäten innerhalb dieser Transaktion aktualisieren, so dass ich die gesamte Transaktion als Ganzes beibehalten muss. Gibt es eine Möglichkeit, die Transaktion innerhalb öffentlichen void persistData() { Data Data = loadExisitingData(); \t \t Daten2 data2 = loadExisitingData(); Aktualisierung (Daten1); Aktualisierung (Daten2); \t \t ... \t \t alles innerhalb der Transaktion externalCall (done save); } –