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
.
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.
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 .