Hibernace Slučování a Osvěžující Subjekty

V předchozím tutoriálu jsme se naučili o ukládání entit pomocí save() nebo saveOrUpdate() metody v režimu spánku. Tam jsme se dozvěděli, že ve většině případů nebudete tyto metody ani potřebovat, protože hibernate automaticky spravuje aktualizace perzistentních entit. Ve většině případů se musíte starat pouze o přechodné objekty. V tomto tutoriálu diskutuji o několika myšlenkách kolem metody refresh() a merge() přítomné ve třídě hibernace.

Osvěžující Hibernate Entit Pomocí metody refresh() Metoda

Někdy čelíme situaci, kdy jsme se databáze aplikace je upraven tak, s nějakou externí aplikaci/agent a tedy odpovídající hibernate entity v aplikaci vlastně stane mimo synchronizace s je databáze zastoupení, tj. mají staré údaje. V tomto případě můžete použít metodu session.refresh() k opětovnému naplnění entity nejnovějšími daty dostupnými v databázi.

k obnovení instance trvalého objektu můžete použít jednu z metod refresh() v rozhraní relace, a to následovně:

public void refresh(Object object) throws HibernateExceptionpublic void refresh(Object object, LockMode lockMode) throws HibernateException

tyto metody znovu načtou vlastnosti objektu z databáze a přepíšou je. V reálných aplikacích nemusíte používat metodu refresh() velmi často kromě výše uvedeného scénáře.

podívejme se na příklad metody refresh ().

Podívejte se nad zvýrazněné řádky.

  • Řádek 15 uložte zaměstnance křestním jménem „Lokesh“
  • Řádek 26 nastavte křestní jméno „Vikas“. Jakmile je entita odpojena, DB nebude aktualizována.
  • řádek 27 obnovte entitu databází pomocí metody refresh().
  • řádek 32 ověřte, že křestní jméno nastavené v entitě bylo aktualizováno pomocí „Lokesh“, protože databáze má tento okamžik.

jednalo se o metodu refresh. Podívejme se na jinou podobnou metodu merge().

Sloučení Hibernate Entit Pomocí merge() Metoda

Metoda merge() dělá přesně opak toho, co refresh() tj. aktualizace databáze, s hodnotami od oddělenou entitu. Metoda Refresh byla aktualizace entity nejnovějšími informacemi o databázi. Takže v podstatě, oba jsou přesně opačné.

Sloučení se provádí, když toužíte mít samostatný subjekt změnil na vytrvalý stát znovu, s oddělenou entitu změny přeneseny do (nebo potlačení) databáze. Metoda podpisy pro sloučení operací:

Object merge(Object object)Object merge(String entityName, Object object)

Hibernace oficiální dokumentaci, velmi dobré vysvětlení merge() metoda:

Kopírovat stav daného objektu do perzistentní objekt se stejným identifikátorem. Pokud v současné době neexistuje žádná trvalá instance přidružená k relaci, bude načtena. Vraťte trvalou instanci. Pokud je daná instance neuložená, uložte kopii a vraťte ji jako nově trvalou instanci. Daná instance se nespojuje s relací. Tato operace se kaskáduje do přidružených instancí, pokud je přidružení mapováno pomocí cascade=“merge“.

takže pokud vezmu níže uvedený kód, pak by vám měly být jasné níže uvedené body.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‚empEntity‘ je oddělená entita, když je předána metodě merge ().
  • merge() metoda bude hledat již načten EmployeeEntity instance s identifikátorem informace převzaty z empEntity. Pokud je taková trvalá entita nalezena, bude použita pro aktualizace. Jinak nový EmployeeEntity je načten do relace pomocí stejné identifikační údaje jako v ‚empEntity‘.
  • data jsou zkopírována z ‚empEntity‘ na nově nalezenou / načtenou entitu.
  • protože nová / nalezená entita je perzistentní, všechna data zkopírovaná z ‚empEntity‘ se automaticky ukládají do databáze.
  • odkaz na tuto novou entitu je vrácen z metody mergedempentity() a je přiřazen proměnné ‚mergedEmpEntity‘.
  • ‚empEntity‘ je stále oddělená entita.

ve výše uvedeném příkladu je ‚mergedPersistentEmpEntity‘ nová entita, která je trvalá. Takže pokud chcete nějaké další změny, pak se v ‚mergedPersistentEmpEntity‘ instance.

to je vše pro tento tutoriál pokrývající metody merge() a refresh() v režimu hibernace. Nezapomeňte, že otázka může být položena jako rozdíl mezi merge() a refresh(), nebo rozdíl mezi merge() a load() atd. Buďte připraveni setkat se s takovým rozdílem mezi otázkami na pohovor.

Šťastné Učení !!

byl tento příspěvek užitečný?

dejte nám vědět, pokud se vám příspěvek líbil. Jedině tak se můžeme zlepšit.
Ano
Ne

V předchozím tutoriálu jsme se naučili o ukládání entit pomocí save() nebo saveOrUpdate() metody v režimu spánku. Tam jsme se dozvěděli, že ve většině případů nebudete tyto metody ani potřebovat, protože hibernate automaticky spravuje aktualizace perzistentních entit. Ve většině případů se musíte starat pouze o přechodné objekty. V tomto tutoriálu diskutuji o několika myšlenkách kolem…

V předchozím tutoriálu jsme se naučili o ukládání entit pomocí save() nebo saveOrUpdate() metody v režimu spánku. Tam jsme se dozvěděli, že ve většině případů nebudete tyto metody ani potřebovat, protože hibernate automaticky spravuje aktualizace perzistentních entit. Ve většině případů se musíte starat pouze o přechodné objekty. V tomto tutoriálu diskutuji o několika myšlenkách kolem…

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.