Verschil tussen save () en saveAndFlush () in Spring Data JPA

1. Overzicht

In deze korte tutorial gaan we het verschil bespreken tussen de sparen() en saveAndFlush () methoden in Spring Data JPA.

Hoewel beide methoden worden gebruikt om entiteiten in de database op te slaan, zijn er enkele fundamentele verschillen.

2. Voorbeeldtoepassing

Laten we eerst kijken hoe we deze kunnen gebruiken sparen() en saveAndFlush () methoden met een voorbeeld. Laten we als eerste stap een entiteitsklasse maken:

@Entity openbare klasse Werknemer {@Id privé Lange id; private String naam; // constructeurs // standaard getters en setters}

Laten we vervolgens een JPA-repository maken voor de CRUD-bewerkingen op het Werknemer entiteitsklasse:

openbare interface EmployeeRepository breidt JpaRepository {} uit

3. Het sparen() Methode

Zoals de naam al aangeeft, is de sparen() methode stelt ons in staat om sla een entiteit op in de database. Het behoort tot de CrudRepository interface gedefinieerd door Spring Data. Laten we eens kijken hoe we het kunnen gebruiken:

employeeRepository.save (nieuwe medewerker (1L, "John"));

Normaal gesproken houdt Hibernate de blijvende toestand in het geheugen. Het proces van het synchroniseren van deze status met de onderliggende database wordt doorspoelen genoemd.

Wanneer we de sparen() methode, de gegevens die zijn gekoppeld aan de opslagbewerking zullen niet naar de database worden doorgespoeld, tenzij en totdat een expliciete aanroep naar doorspoelen ()of plegen () methode is gemaakt.

Als we JPA-implementaties zoals Hibernate gebruiken, dan zal die specifieke implementatie de flush- en commit-bewerkingen beheren.

Een ding dat we hier in gedachten moeten houden, is dat, als we besluiten om de gegevens zelf te wissen zonder deze vast te leggen, de wijzigingen niet zichtbaar zijn voor de externe transactie, tenzij een commit-oproep wordt gedaan in deze transactie of het isolatieniveau van de externe transactie is READ_UNCOMMITTED.

4. Het saveAndFlush () Methode

in tegenstelling tot sparen(), de saveAndFlush () methode wist de gegevens onmiddellijk tijdens de uitvoering. Deze methode behoort tot de JpaRepository interface van Spring Data JPA. Hier is hoe we het gebruiken:

employeeRepository.saveAndFlush (nieuwe medewerker (2L, "Alice"));

Normaal gesproken gebruiken we deze methode wanneer onze bedrijfslogica de opgeslagen wijzigingen op een later punt tijdens dezelfde transactie moet lezen, maar vóór de vastlegging.

Stel je bijvoorbeeld een scenario voor waarin we een opgeslagen procedure moeten uitvoeren die een eigenschap van de entiteit verwacht, die we gaan opslaan. In dit geval is het sparen() methode zal niet werken omdat de wijzigingen niet synchroon lopen met de database en de opgeslagen procedure niet op de hoogte is van de wijzigingen. De saveAndFlush () methode is perfect geschikt voor dit soort scenario.

5. Conclusie

In dit korte artikel hebben we ons gericht op het verschil tussen Spring Data JPA sparen() en saveAndFlush () methoden.

In de meeste gevallen gebruiken we de sparen() methode. Maar af en toe kunnen we de saveAndFlush () methode ook voor specifieke gebruikssituaties.

Zoals gewoonlijk is het korte voorbeeld dat we hier hebben besproken te vinden op GitHub.