Rechts - Ich möchte (z. B.) 1.000.000 Datensätze aus einer Datenbank löschen. Das dauert lange -> die Transaktion läuft ab und schlägt fehl. Also - ich lösche sie in Chargen sagen 25000 Datensätze pro Transaktion. Verwenden der Limit-Klausel für MySQL oder ROWNUM für Oracle. Großartig funktioniert das.Löschen/Löschen von Datensätzen über Java ORM
Ich möchte dies in einer datenbankunabhängigen Art und Weise tun. Und von einer vorhandenen Java-Codebasis, die JPA/Hibernate verwendet.
Pech gehabt. JPA Query.setMaxResults und setFirstResult haben keinen -Effekt zum Schreiben von Abfragen (z. B. delete). Das Auswählen vieler Entitäten in den Speicher, um sie einzeln zu löschen, ist sehr langsam und dumm, würde ich sagen.
Also verwende ich eine native Abfrage und verwalten Sie die 'Limit' -Klausel im Anwendungscode. Es wäre nett, diese Klausel in orm.xml zu kapseln, aber ... "Hibernate Annotations 3.2 unterstützt keine Bulk-Aktualisierung/löscht mit nativen Abfragen." - http://opensource.atlassian.com/projects/hibernate/browse/ANN-469.
Ich könnte mir vorstellen, dass dies ein häufiges Problem ist. Hat jemand eine bessere datenbankunabhängige Lösung?
Ich denke, der Fragesteller ist bereits dabei, aber zu finden, dass das Löschen ist so langsam es Timeout. –