Razlika između save () i saveAndFlush () u Spring Data JPA

1. Pregled

U ovom kratkom vodiču razgovarat ćemo o razlici između uštedjeti() i saveAndFlush () metode u Spring Data JPA.

Iako se obje ove metode koriste za spremanje entiteta u bazu podataka, postoje neke temeljne razlike.

2. Primjer prijave

Pogledajmo prvo kako se koristi uštedjeti() i saveAndFlush () metode s primjerom. Kao prvi korak, kreirajmo klasu entiteta:

@ Entity public class Employee {@Id private Long id; privatni naziv niza; // konstruktori // standardni getteri i postavljači}

Dalje, kreirajmo JPA spremište za CRUD operacije na Zaposlenik klasa entiteta:

javno sučelje EmployeeRepository proširuje JpaRepository {}

3. The uštedjeti() Metoda

Kao što naziv opisuje, uštedjeti() metoda nam omogućuje spremiti entitet u DB. Pripada CrudRepository sučelje definirano Spring Data. Pogledajmo kako ga možemo koristiti:

workerRepository.save (novi zaposlenik (1L, "John"));

Hibernate obično zadržava trajno stanje u memoriji. Proces sinkronizacije ovog stanja s temeljnim DB-om naziva se ispiranje.

Kada koristimo uštedjeti() metoda, podaci povezani s operacijom spremanja neće se isprazniti u DB osim do eksplicitnog poziva na isprati ()ili počiniti() načinjena je metoda.

Ako koristimo JPA implementacije poput Hibernate, tada će ta posebna implementacija upravljati operacijama ispiranja i urezivanja.

Ovdje moramo imati na umu da, ako odlučimo sami isprati podatke, a da ih ne počinimo, promjene neće biti vidljive vanjskoj transakciji, osim ako se u ovoj transakciji ili na razini izolacije ne izvrši poziv urezivanja vanjske transakcije je PROČITANO_NEMOŽENO.

4. The saveAndFlush () Metoda

Za razliku od uštedjeti(), saveAndFlush () metoda ispire podatke odmah tijekom izvršenja. Ova metoda pripada JpaRepository sučelje Spring Data JPA. Evo kako ga koristimo:

workerRepository.saveAndFlush (novi zaposlenik (2L, "Alice"));

Obično ovu metodu koristimo kada naša poslovna logika treba kasnije pročitati spremljene promjene tijekom iste transakcije, ali prije urezivanja.

Na primjer, zamislite scenarij u kojem moramo izvršiti pohranjenu proceduru koja očekuje svojstvo entiteta, koje ćemo spremiti. U ovom slučaju, uštedjeti() metoda neće raditi jer promjene nisu sinkronizirane s DB-om, a pohranjena procedura ne zna za promjene. The saveAndFlush () metoda je savršeno prikladna za ovu vrstu scenarija.

5. Zaključak

U ovom smo se kratkom članku usredotočili na razliku između Spring Data JPA uštedjeti() i saveAndFlush () metode.

U većini slučajeva koristit ćemo uštedjeti() metoda. Ali povremeno ćemo možda trebati koristiti saveAndFlush () metoda kao i za specifične slučajeve upotrebe.

Kao i obično, kratki primjer o kojem smo ovdje razgovarali nalazi se na GitHubu.