Forskellen mellem save () og saveAndFlush () i Spring Data JPA

1. Oversigt

I denne korte vejledning skal vi diskutere forskellen mellem Gemme() og saveAndFlush () metoder i Spring Data JPA.

Selvom begge disse metoder bruges til at gemme enheder i databasen, er der nogle grundlæggende forskelle.

2. Eksempel på anvendelse

Lad os først se, hvordan du bruger Gemme() og saveAndFlush () metoder med et eksempel. Lad os som et første trin oprette en enhedsklasse:

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

Lad os derefter oprette et JPA-lager til CRUD-operationer på Medarbejder enhedsklasse:

offentlig grænseflade EmployeeRepository udvider JpaRepository {}

3. Den Gemme() Metode

Som navnet skildrer, er Gemme() metode tillader os at gem en enhed i DB. Det hører til CrudRepository interface defineret af Spring Data. Lad os se, hvordan vi kan bruge det:

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

Normalt holder dvale den vedvarende tilstand i hukommelsen. Processen med at synkronisere denne tilstand med den underliggende DB kaldes skylning.

Når vi bruger Gemme() metode, dataene, der er knyttet til lagringsoperationen, skylles ikke til DB, medmindre og indtil et eksplicit opkald til Flush()eller begå() metoden er lavet.

Hvis vi bruger JPA-implementeringer som Hibernate, vil den specifikke implementering styre flush og begå operationer.

En ting, vi skal huske her, er, at hvis vi beslutter at skylle dataene selv uden at forpligte dem, så vil ændringerne ikke være synlige for den eksterne transaktion, medmindre der foretages et call i denne transaktion eller isolationsniveauet af den eksterne transaktion er READ_UNCOMMITTED.

4. Den saveAndFlush () Metode

I modsætning til Gemme(), det saveAndFlush () metode skyller dataene straks under udførelsen. Denne metode hører til JpaRepository grænseflade til Spring Data JPA. Sådan bruger vi det:

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

Normalt bruger vi denne metode, når vores forretningslogik skal læse de gemte ændringer på et senere tidspunkt under den samme transaktion, men inden forpligtelsen.

Forestil dig f.eks. Et scenarie, hvor vi skal udføre en lagret procedure, der forventer en ejendom for enheden, som vi skal gemme. I dette tilfælde er Gemme() metode fungerer ikke, da ændringerne ikke er synkroniseret med DB, og den gemte procedure ikke kender til ændringerne. Det saveAndFlush () metoden er perfekt egnet til denne slags scenarier.

5. Konklusion

I denne hurtige artikel fokuserede vi på forskellen mellem Spring Data JPA Gemme() og saveAndFlush () metoder.

I de fleste tilfælde bruger vi Gemme() metode. Men lejlighedsvis kan det være nødvendigt at bruge saveAndFlush () metode til specifikke brugssager.

Som sædvanligt kan det korte eksempel, vi har diskuteret her, findes på GitHub.


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