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.