web-dev-qa-db-fra.com

Différence entre save et saveAndFlush dans Spring data jpa

J'essaie d'apprendre les données de printemps JPA en testant certaines opérations CRUD via JpaRepository.

Je suis tombé sur deux méthodes save et saveAndFlush. Je ne comprends pas la différence entre ces deux. Lors de l'appel de save, mes modifications sont également enregistrées dans la base de données. Par conséquent, quelle est l'utilisation de saveAndFlush.

113
Anand

Sur saveAndFlush, les modifications seront immédiatement transférées à DB dans cette commande. Avec save, ce n'est pas nécessairement vrai et peut rester en mémoire jusqu'à ce que les commandes flush ou commit soient émises.

Sachez toutefois que même si vous effacez les modifications de la transaction sans les valider, les modifications restent ne le seront pas visibles pour les transactions extérieures jusqu'à la validation dans cette transaction.

Dans votre cas, vous utilisez probablement une sorte de mécanisme de transaction qui émet la commande commit si tout se passe bien.

121
user1918305

En fonction du mode de veille prolongée que vous utilisez (AUTO est le mode par défaut) save peut écrire ou non vos modifications dans la base de données. Lorsque vous appelez saveAndFlush, vous appliquez la synchronisation de l'état de votre modèle à la base de données.

Si vous utilisez le mode de vidage AUTO et que vous utilisez votre application pour sauvegarder puis sélectionner à nouveau les données, vous ne verrez pas de différence de bahvior entre save() et saveAndFlush(), car la sélection déclenche un flush en premier. Voir le documentation .

28
Ralf