Rozdiel medzi save () a saveAndFlush () v Spring Data JPA

1. Prehľad

V tomto krátkom návode sa chystáme diskutovať o rozdieloch medzi uložiť () a saveAndFlush () metódy v Spring Data JPA.

Aj keď sa obidve tieto metódy používajú na ukladanie entít do databázy, existujú určité zásadné rozdiely.

2. Ukážka aplikácie

Najprv sa pozrime, ako sa používa uložiť () a saveAndFlush () metódy s príkladom. Ako prvý krok si vytvoríme triedu entít:

@Entity public class Zamestnanec {@Id private Long id; súkromné ​​meno reťazca; // konštruktory // štandardné getre a setre}

Ďalej vytvoríme úložisko JPA pre operácie CRUD na serveri Zamestnanec trieda entity:

verejné rozhranie EmployeeRepository rozširuje JpaRepository {}

3. The uložiť () Metóda

Ako je zrejmé z názvu, uložiť () metóda nám umožňuje uložiť entitu do DB. Patrí do Úložisko Crud rozhranie definované Spring Data. Pozrime sa, ako to môžeme využiť:

employeeRepository.save (nový zamestnanec (1L, "John"));

Hibernácia zvyčajne uchováva pretrvávajúci stav v pamäti. Proces synchronizácie tohto stavu s podkladovou databázou DB sa nazýva flushing.

Keď použijeme uložiť () metóda, údaje spojené s operáciou uloženia nebudú vypláchnuté do DB, pokiaľ a až do výslovného volania na spláchnuť()alebo spáchať () metóda je vyrobená.

Ak používame implementácie JPA ako Hibernate, potom bude touto konkrétnou implementáciou riadiť operácie flush a commit.

Tu si musíme uvedomiť jednu vec, že ​​ak sa rozhodneme údaje vypláchnuť sami bez toho, aby sme ich spáchali, potom zmeny nebudú viditeľné pre vonkajšiu transakciu, pokiaľ v tejto transakcii alebo na úrovni izolácie nebude vykonané potvrdenie. vonkajšej transakcie je READ_UNCOMMITTED.

4. The saveAndFlush () Metóda

Na rozdiel od uložiť (), saveAndFlush () metóda vyprázdni údaje okamžite počas vykonávania. Táto metóda patrí k JpaRepository rozhranie Spring Data JPA. Používame ho takto:

employeeRepository.saveAndFlush (nový zamestnanec (2L, "Alice"));

Túto metódu zvyčajne používame, keď naša obchodná logika potrebuje načítať uložené zmeny neskôr počas tej istej transakcie, ale pred potvrdením.

Predstavte si napríklad scenár, keď musíme vykonať uloženú procedúru, ktorá očakáva vlastnosť entity, ktorú uložíme. V takom prípade uložiť () metóda nebude fungovať, pretože zmeny nie sú synchronizované s databázou DB a uložená procedúra o zmenách nevie. The saveAndFlush () metóda sa dokonale hodí pre tento druh scenára.

5. Záver

V tomto rýchlom článku sme sa zamerali na rozdiel medzi Spring Data JPA uložiť () a saveAndFlush () metódy.

Vo väčšine prípadov použijeme uložiť () metóda. Niekedy však možno budeme musieť použiť saveAndFlush () pre konkrétne prípady použitia.

Krátky príklad, o ktorom sme tu hovorili, je ako obvykle uvedený na GitHub.


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