Ich verwende Spring JPA für den Datenbankzugriff. Ich kann Beispiele wie findByName und countByName finden, für die ich keine Methodenimplementierung schreiben muss. Ich hoffe, Beispiele für das Löschen einer Gruppe von Datensätzen zu finden, die auf einer bestimmten Bedingung basieren.
Unterstützt Spring JPA deleteByName-like delete? Jeder Zeiger wird geschätzt.
Grüße und danke.
spring
spring-data
spring-data-jpa
neugierig1
quelle
quelle
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Übrigens, stellen Sie sicher, dass Sie keine Eingabe habenparent__id
(haben Sie absichtlich einen doppelten niedrigen Strich?). Warum verwenden Sie jedoch eine native Abfrageoption?Die Ableitung von Löschabfragen unter Verwendung des angegebenen Methodennamens wird ab Version 1.6.0.RC1 von Spring Data JPA unterstützt. Die Schlüsselwörter
remove
unddelete
werden unterstützt. Als Rückgabewert kann zwischen der Anzahl oder einer Liste entfernter Entitäten gewählt werden.quelle
Wenn Sie sich den Quellcode von Spring Data JPA und insbesondere die
PartTreeJpaQuery
Klasse ansehen, werden Sie feststellen, dass versucht wird, diese zu instanziierenPartTree
. Innerhalb dieser Klasse der folgende reguläre Ausdruckprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
sollte angeben, was erlaubt ist und was nicht.
Wenn Sie versuchen, eine solche Methode hinzuzufügen, werden Sie natürlich feststellen, dass dies nicht funktioniert, und Sie erhalten die vollständige Stapelverfolgung.
Ich sollte beachten, dass ich die Version
1.5.0.RELEASE
von Spring Data JPA verwendet habequelle
2 Wege:-
1. eine benutzerdefinierte Abfrage
2. JPA-Abfrage nach Methode
Wenn Sie mit der Abfrage nach Methode (2. Weg) fortfahren, wird zuerst ein get-Aufruf ausgeführt
Dann wird es in eine Liste geladen. Dann wird nacheinander die Lösch-ID aufgerufen
Zuerst die Liste des Objekts abrufen, dann die for-Schleife, um die ID nacheinander zu löschen
Aber die 1. Option (benutzerdefinierte Abfrage),
Es ist nur eine einzige Abfrage. Sie wird gelöscht, wo immer der Wert vorhanden ist.
Gehen Sie auch über diesen Link https://www.baeldung.com/spring-data-jpa-deleteby
quelle
Wenn Sie vordefinierte Löschmethoden verwenden, die direkt von Spring JPA bereitgestellt werden, werden im Folgenden zwei Abfragen vom Framework ausgeführt.
Sammeln Sie zuerst Daten (wie ID und andere Spalte), indem Sie eine Auswahlabfrage mit einer Löschabfrage-Where-Klausel ausführen.
Nachdem Sie die Ergebnismenge der ersten Abfrage erhalten haben, werden die zweiten Löschabfragen für alle IDs ausgeführt (eine nach der anderen).
Hinweis: Dies ist keine für Ihre Anwendung optimierte Methode, da viele Abfragen für einzelne MYSQL-Löschabfragen ausgeführt werden.
Dies ist eine weitere optimierte Methode zum Löschen von Abfragecode, da nur eine Löschabfrage mithilfe der folgenden benutzerdefinierten Methoden ausgeführt wird.
quelle
Seien Sie vorsichtig, wenn Sie abgeleitete Abfragen zum Löschen von Stapeln verwenden. Es ist nicht das, was Sie erwarten: DeleteExecution
quelle
Ja, die deleteBy-Methode wird unterstützt. Um sie zu verwenden, müssen Sie die Methode mit @Transactional kommentieren
quelle