Különbség a save () és a saveAndFlush () között a Spring Data JPA-ban

1. Áttekintés

Ebben a rövid bemutatóban megvitatjuk a különbséget a mentés() és saveAndFlush () módszerek a Spring Data JPA-ban.

Annak ellenére, hogy mindkét módszert használják az entitások adatbázisba mentésére, vannak alapvető különbségek.

2. Példa alkalmazásra

Először nézzük meg, hogyan kell használni mentés() és saveAndFlush () módszerek egy példával. Első lépésként hozzunk létre egy entitásosztályt:

@Entity public class Employee {@Id private Long id; privát karakterlánc neve; // konstruktorok // szabványos szerelők és beállítók}

Ezután hozzunk létre egy JPA adattárat a CRUD műveletekhez a Munkavállaló entitásosztály:

nyilvános felület Az EmployeeRepository kiterjeszti a JpaRepository {}

3. Az mentés() Módszer

Ahogy a neve is mutatja, a mentés() módszer lehetővé teszi számunkra, hogy mentse el az entitást a DB-be. A CrudRepository interfész által meghatározott Spring Data. Lássuk, hogyan tudjuk használni:

workerRepository.save (új alkalmazott (1L, "John"));

Normál esetben a hibernált állapot a memóriában tartja a tartós állapotot. Az állapot szinkronizálásának folyamatát az alapul szolgáló DB-vel öblítésnek nevezzük.

Amikor használjuk a mentés() módszer, a mentési művelettel társított adatok nem kerülnek a DB-be, kivéve, amíg erre kifejezett hívást nem kapunk öblítés ()vagy elkövetni() módszer készül.

Ha olyan JPA-megvalósításokat használunk, mint a Hibernate, akkor ez a konkrét megvalósítás fogja kezelni az öblítés és a végrehajtás műveleteit.

Egy dolgot kell itt szem előtt tartanunk, hogy ha úgy döntünk, hogy az adatokat saját magunk által öblítjük el anélkül, hogy azt elkövetnénk, akkor a változások a külső tranzakció számára nem lesznek láthatók, hacsak nem történik végrehajtási hívás ebben a tranzakcióban vagy az elkülönítési szinten a külső ügylet READ_UNCOMMITTED.

4. A saveAndFlush () Módszer

nem úgy mint mentés(), a saveAndFlush () módszer a végrehajtás során azonnal kiöblíti az adatokat. Ez a módszer a JpaRepository a Spring Data JPA interfésze. Így használjuk:

workerRepository.saveAndFlush (új alkalmazott (2L, "Alice"));

Normál esetben ezt a módszert akkor alkalmazzuk, amikor üzleti logikánknak el kell olvasnia a mentett változásokat egyazon tranzakció során később, de az elkötelezettség előtt.

Képzeljünk el például egy forgatókönyvet, ahol egy tárolt eljárást kell végrehajtanunk, amely elvárja az entitás tulajdonságát, amelyet menteni fogunk. Ebben az esetben a mentés() A módszer nem fog működni, mivel a változtatások nincsenek szinkronban a DB-vel, és a tárolt eljárás nem ismeri a változásokat. A saveAndFlush () módszer tökéletesen megfelel egy ilyen forgatókönyv számára.

5. Következtetés

Ebben a rövid cikkben a Spring Data JPA közti különbségre összpontosítottunk mentés() és saveAndFlush () mód.

A legtöbb esetben a mentés() módszer. De alkalmanként szükség lehet a saveAndFlush () módszert, valamint speciális felhasználási esetekre is.

Szokás szerint az itt tárgyalt rövid példa megtalálható a GitHub oldalon.