Ik probeer lentegegevens JPA te leren door een CRUD-bewerking te testen via JpaRepository
.
Ik kwam twee methoden save
en saveAndFlush
tegen.
Ik snap het verschil niet tussen deze twee. Bij het aanroepen van save
worden ook mijn wijzigingen opgeslagen in de database, dus wat is het nut van saveAndFlush
.
Antwoord 1, autoriteit 100%
Op saveAndFlush
worden wijzigingen in deze opdracht onmiddellijk naar DB gespoeld. Met save
is dit niet per se waar, en kan het alleen in het geheugen blijven, totdat de commando’s flush
of commit
worden gegeven.
Maar houd er rekening mee dat, zelfs als u de wijzigingen in de transactie doorspoelt en ze niet vastlegt, de wijzigingen nog steeds nietzichtbaar zullen zijn voor de externe transacties tot de vastlegging in deze transactie.
p>
In jouw geval gebruik je waarschijnlijk een soort transactiemechanisme, dat de opdracht commit
voor je afgeeft als alles goed werkt.
Antwoord 2, autoriteit 29%
Afhankelijk van de hibernate flush-modus die u gebruikt (AUTO
is de standaardinstelling) kan save
uw wijzigingen al dan niet meteen naar de DB schrijven. Wanneer u saveAndFlush
aanroept, dwingt u de synchronisatie van uw modelstatus met de DB af.
Als u de spoelmodus AUTO gebruikt en uw applicatie gebruikt om eerst de gegevens op te slaan en vervolgens opnieuw te selecteren, ziet u geen verschil in bahvior tussen save()
en saveAndFlush()
omdat de select eerst een flush triggert. Zie de documentatie.