J'utilise Spring JPA pour accéder à la base de données. Je suis capable de trouver des exemples tels que findByName et countByName, pour lesquels je n'ai pas à écrire d'implémentation de méthode. J'espère trouver des exemples pour supprimer un groupe d'enregistrements en fonction de certaines conditions.
Spring JPA prend-il en charge la suppression de type deleteByName? Tout pointeur est apprécié.
Cordialement et merci.
spring
spring-data
spring-data-jpa
curieux1
la source
la source
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Btw, assurez-vous que vous n'avez pas de typeparent__id
(avez-vous un double tiret bas par intention?). Pourquoi utilisez-vous une option de requête native?La dérivation de requêtes de suppression à l'aide d'un nom de méthode donné est prise en charge à partir de la version 1.6.0.RC1 de Spring Data JPA. Les mots
remove
- clés etdelete
sont pris en charge. Comme valeur de retour, on peut choisir entre le nombre ou une liste d'entités supprimées.la source
Si vous regardez le code source de Spring Data JPA, et en particulier la
PartTreeJpaQuery
classe, vous verrez qu'il tente d'instancierPartTree
. À l'intérieur de cette classe, l'expression régulière suivanteprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
devrait indiquer ce qui est autorisé et ce qui ne l'est pas.
Bien sûr, si vous essayez d'ajouter une telle méthode, vous verrez en fait que cela ne fonctionne pas et vous obtenez le stacktrace complet.
Je dois noter que j'utilisais la version
1.5.0.RELEASE
de Spring Data JPAla source
2 façons: -
1ère requête personnalisée
2ème une requête JPA par méthode
Lorsque vous utilisez la requête par méthode (2ème manière), il effectuera d'abord un appel get
Ensuite, il le chargera dans une liste puis il appellera delete id un par un
Récupérez d'abord la liste des objets, puis la boucle for pour supprimer l'id un par un
Mais, la 1ère option (requête personnalisée),
C'est juste une seule requête. Elle supprimera partout où la valeur existe.
Passez également par ce lien https://www.baeldung.com/spring-data-jpa-deleteby
la source
Si vous utilisez des méthodes de suppression prédéfinies fournies directement par Spring JPA, deux requêtes ci-dessous seront exécutées par le framework.
Commencez par collecter des données (comme l'id et une autre colonne) en utilisant la requête de sélection d'exécution avec la clause where de la requête de suppression.
puis après avoir obtenu le résultat de la première requête, les secondes requêtes de suppression seront exécutées pour tous les id (une par une)
Remarque: ce n'est pas une manière optimisée pour votre application car de nombreuses requêtes seront exécutées pour une seule requête de suppression MYSQL.
Il s'agit d'une autre méthode optimisée pour supprimer le code de requête, car une seule requête de suppression s'exécutera à l'aide des méthodes personnalisées ci-dessous.
la source
Soyez prudent lorsque vous utilisez une requête dérivée pour la suppression par lots. Ce n'est pas ce que vous attendez: DeleteExecution
la source
Oui, la méthode deleteBy est prise en charge Pour l'utiliser, vous devez annoter la méthode avec @Transactional
la source