@DynamicUpdate with Spring Data JPA

1. Áttekintés

Amikor a Spring Data JPA-t hibernált állapotban használjuk, használhatjuk a hibernálás további szolgáltatásait is. @DynamicUpdate az egyik ilyen jellemző.

@DynamicUpdate osztály szintű kommentár, amely alkalmazható a JPA entitásra. Biztosítja, hogy a Hibernate csak az SQL utasítás módosított oszlopait használja, amelyeket az entitás frissítéséhez generál.

Ebben a cikkben megnézzük a @DynamicUpdate annotáció, a segítségével Spring Data JPA példa.

2. JPA @Entity

Amikor egy alkalmazás elindul, a Hibernate generálja az SQL utasításokat az összes entitás CRUD műveleteihez. Ezeket az SQL utasításokat egyszer állítják elő, és a gyorsítótárba helyezik a memóriában a teljesítmény javítása érdekében.

A létrehozott SQL frissítési utasítás tartalmazza az entitás összes oszlopát. Ha frissítünk egy entitást, akkor a módosított oszlopok értékei átkerülnek az SQL frissítési utasításba. A nem frissített oszlopok esetében a hibernálás a meglévő értékeket használja a frissítéshez.

Próbáljuk megérteni ezt egy példával. Először vegyük figyelembe egy elnevezett JPA entitást Számla:

@Entity public class Account {@Id private int id; @ Oszlop privát karakterlánc neve; @Column private String típus; @Column privát logikai aktív; // Getters and Setters}

Ezután írjunk egy JPA-adattárat a Számla entitás:

@Repository nyilvános felület A AccountRepository kiterjeszti a JpaRepository {}

Most használjuk a AccountRepository hogy frissítse a név mező egy Számla tárgy:

Számlafiók = accountRepository.findOne (ACCOUNT_ID); account.setName ("Tesztfiók"); accountRepository.save (account);

A frissítés végrehajtása után ellenőrizhetjük a létrehozott SQL utasítást. A létrehozott SQL utasítás tartalmazza a Számla:

frissítés Fiókkészlet aktív = ?, név = ?, type =? ahol id =?

3. JPA @Entity val vel @DynamicUpdate

Láttuk, hogy annak ellenére, hogy módosítottuk a név Csak a Hibernate mezőben minden oszlop szerepel az SQL utasításban.

Most tegyük hozzá a @DynamicUpdate jegyzet a Számla entitás:

@Entity @DynamicUpdate public class Account {// Meglévő adatok és módszerek}

Ezután futtassuk ugyanazt a frissítési kódot, amelyet az előző szakaszban használtunk. Láthatjuk, hogy a Hibernate által generált SQL ebben az esetben csak az név oszlop:

frissítse a fiókkészlet nevét =? ahol id =?

Így, mi történik, amikor használjuk @DynamicUpdate egy entitáson?

Valójában, amikor használjuk @DynamicUpdate egy entitáson a Hibernate nem használja a gyorsítótárazott SQL utasítást a frissítéshez. Ehelyett SQL-utasítást generál minden alkalommal, amikor az entitást frissítjük. Ez a generált SQL csak a megváltozott oszlopokat tartalmazza.

A megváltozott oszlopok megismeréséhez a hibernálásnak nyomon kell követnie az aktuális entitás állapotát. Tehát, amikor egy entitás bármely mezőjét megváltoztatjuk, összehasonlítja az entitás aktuális és módosított állapotát.

Ez azt jelenti @DynamicUpdate teljesítmény-rezsi társul hozzá. Ezért csak akkor használjuk, amikor valóban szükséges.

Természetesen van néhány forgatókönyv, ahol ezt a kommentárt kell használnunk - például, ha egy entitás egy olyan táblázatot képvisel, amelynek nagy az oszlopainak száma, és csak néhány ilyen oszlopot kell gyakran frissíteni. Továbbá, ha verzió nélküli optimistás zárat használunk, akkor használnunk kell @DynamicUpdate.

4. Következtetés

Ebben az oktatóanyagban megvizsgáltuk a @DynamicUpdate Hibernate annotációja. Használtunk egy példát a Spring Data JPA-ra @DynamicUpdate akcióban. Megbeszéltük azt is, hogy mikor kell használnunk ezt a funkciót, és mikor nem.

Mint mindig, az ebben az oktatóanyagban használt teljes kódpéldák elérhetők a Githubon.


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