Differenza tra save e saveAndFlush in Spring jpa dati


131

Sto cercando di apprendere l'APP dei dati di primavera testando alcune operazioni CRUD tramite JpaRepository.

Mi sono imbattuto in due metodi savee saveAndFlush. Non capisco la differenza tra questi due. Chiamando saveanche le mie modifiche vengono salvate nel database, quindi a che serve saveAndFlush.

Risposte:


139

Attivato saveAndFlush, le modifiche verranno immediatamente scaricate sul DB in questo comando. Con save, questo non è necessariamente vero, e potrebbe rimanere solo nella memoria, fino a quando flusho commitcomandi vengono inviati.

Tuttavia, tieni presente che anche se annulli le modifiche nella transazione e non le impegni, le modifiche non saranno ancora visibili alle transazioni esterne fino al commit in questa transazione.

Nel tuo caso, probabilmente usi una sorta di meccanismo di transazione, che emette il commitcomando per te se tutto funziona bene.


35
"non sarà visibile alle transazioni esterne fino al commit in questa transazione" Dipende dal livello di isolamento delle altre transazioni. Se il livello di isolamento di una transazione è READ_UNCOMMITTED ,, vedrà ciò che è stato scaricato ma non ancora eseguito da altre transazioni.
Gab 是 好人

1
ma, nel mio progetto, utilizzo save (), saveAll () e persiste nel DB senza commit o flush esplicito. Allora perché dovrei preferire saveAndFlush? Modalità FLush Tutte queste cose sono in modalità predefinita
P Satish Patro

37

A seconda della modalità di sospensione ibernazione che si sta utilizzando ( AUTOè l'impostazione predefinita) savepuò o meno scrivere immediatamente le modifiche nel DB. Quando chiami saveAndFlushstai imponendo la sincronizzazione dello stato del tuo modello con il DB.

Se si utilizza la modalità di scarico AUTO e si utilizza l'applicazione per prima salvare e quindi selezionare nuovamente i dati, non si noterà alcuna differenza in bahvior tra save()e saveAndFlush()perché la selezione attiva prima un flush. Vedi la documentazione .


scusate ma se io saveun'entità e ancora la stessa, intendete con saveil secondo comando non lancerò un'eccezione per la duplicazione, per esempio ??
Azerafati,

3
@Bludream Sì, è mia comprensione che le chiamate a savesono idempotenti. Vedi questa discussione per maggiori dettagli.
Ralf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.