JPA Ruhezustand Bulk / Batch-Update in Spring MVC

8

Ich bin neu bei Spring MVC und nicht viel mit JPA. alles, was ich tun möchte, ist eine Liste von Datensätzen zu aktualisieren und es funktioniert gut, wenn ich die Liste durchlaufen und Update auf DAO aufrufen.

Aber ich möchte nicht 100 Aktualisierungs- / Einfügeoperationen oder DB-Rundreisen durchführen.

Könnte mir bitte jemand zeigen, wie man etwa 100 Datensätze mit Batch-Update aktualisiert, statt wie folgt vorzugehen:

%Vor%

Ist es möglich, wenn mir jemand eine einfache Möglichkeit zur Batch-Aktualisierung bieten könnte? Ich würde es wirklich schätzen, wenn ich so viel Aufklärung wie möglich bekomme.

Danke

    
user22197 13.07.2013, 00:51
quelle

1 Antwort

5

Was Sie haben, ist so ziemlich die Standardmethode zum Aktualisieren mehrerer Zeilen über JPA. Ereignis Frühling -data-jpa , das save(Iterable<T> items) nur für Iterator unter den Covern verfügbar macht. hier ist eine andere Frage, die sehr schön auf die Optionen beantwortet wird, aber kurz gesagt, Sie sind auf dem richtigen Weg, mit der Alternative, die Update-Anweisung selbst zu formulieren und auszuführen.

Aktualisierung: Die Ausführung in einer einzelnen Transaktion kann die Leistung erhöhen, da Sie nur einmal den Transaktionsaufwand haben. Sie erhalten auch das Szenario, in dem, wenn eines der Updates fehlschlägt, alle vorherigen ebenfalls zurückgesetzt werden. (Möglicherweise verlieren Sie also die gesamte Arbeit von früheren Updates - Sie können das nicht wollen oder wollen)

Beachten Sie auch den verwendeten Transaktions-Manager-Typ (z. B. JTA oder JPA) und die JPA-Implementierung (z. B. Hibernate), da manchmal nicht gut zusammenspielt.

Also, in Ihrem DAO-Code möchten Sie vielleicht dies tun;

  • fügen Sie eine Überladung update(Iterator<Entity> entities) code
  • hinzu
  • in diesem Code tun Sie etwas wie folgt;

    entityManager.getTransaction().begin();//start the transaction

    for (Entity entity : entities) {

    %Vor%

    }

    entityManager.getTransaction().commit();//complete the transaction

  • oder Sie können die @Transactional -Anmerkung für Ihre save(Iterable<Entity> entities) -Methode verwenden. Stellen Sie sicher, dass Sie auch im Spring Context Unterstützung für Transaktionsanmerkungen haben
incomplete-co.de 13.07.2013, 11:24
quelle