Forskjellen mellom save () og saveAndFlush () i Spring Data JPA

1. Oversikt

I denne korte opplæringen skal vi diskutere forskjellen mellom lagre() og saveAndFlush () metoder i Spring Data JPA.

Selv om begge disse metodene brukes til å lagre enheter i databasen, er det noen grunnleggende forskjeller.

2. Eksempel på applikasjon

La oss først se hvordan du bruker lagre() og saveAndFlush () metoder med et eksempel. La oss som et første trinn opprette en enhetsklasse:

@Entity offentlig klasse ansatt {@Id privat Lang id; privat strengnavn; // konstruktører // standard getters og setters}

La oss deretter opprette et JPA-depot for CRUD-operasjonene på Ansatt enhetsklasse:

offentlig grensesnitt EmployeeRepository utvider JpaRepository {}

3. Den lagre() Metode

Som navnet skildrer, er lagre() metoden lar oss lagre en enhet i DB. Det tilhører CrudRepository grensesnitt definert av Spring Data. La oss se hvordan vi kan bruke det:

employeeRepository.save (ny ansatt (1L, "John"));

Normalt holder dvalemodus den vedvarende tilstanden i minnet. Prosessen med å synkronisere denne tilstanden til den underliggende DB kalles spyling.

Når vi bruker lagre() metode, dataene som er knyttet til lagringsoperasjonen, vil ikke skylles til DB med mindre og før en eksplisitt samtale til flush ()eller begå() metoden er laget.

Hvis vi bruker JPA-implementeringer som Hibernate, vil den spesifikke implementeringen administrere flush og begå operasjoner.

En ting vi må huske på her er at hvis vi bestemmer oss for å skylle dataene selv uten å forplikte oss, vil ikke endringene være synlige for den utenforstående transaksjonen med mindre det blir foretatt et anrop i denne transaksjonen eller isolasjonsnivået av den utenforstående transaksjonen er READ_UNCOMMITTED.

4. Den saveAndFlush () Metode

I motsetning til lagre(), den saveAndFlush () metode skyller dataene umiddelbart under utførelsen. Denne metoden tilhører JpaRepository grensesnitt for Spring Data JPA. Slik bruker vi det:

employeeRepository.saveAndFlush (ny ansatt (2L, "Alice"));

Normalt bruker vi denne metoden når vår forretningslogikk må lese de lagrede endringene på et senere tidspunkt under den samme transaksjonen, men før forpliktelsen.

Tenk deg for eksempel et scenario der vi må utføre en lagret prosedyre som forventer en eiendom til enheten, som vi skal lagre. I dette tilfellet lagre() metoden vil ikke fungere siden endringene ikke er synkronisert med DB og den lagrede prosedyren ikke vet om endringene. De saveAndFlush () metoden passer perfekt for denne typen scenario.

5. Konklusjon

I denne raske artikkelen fokuserte vi på forskjellen mellom Spring Data JPA lagre() og saveAndFlush () metoder.

I de fleste tilfeller bruker vi lagre() metode. Men noen ganger må vi kanskje bruke saveAndFlush () metode også for spesifikke brukssaker.

Som vanlig kan det korte eksemplet vi har diskutert her finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found