Hibernate Merging and Refreshing Entities

i tidigare handledning lärde vi oss om att spara enheter med hjälp av save() eller saveOrUpdate() metoder i hibernate. Där lärde vi oss att du i de flesta fall inte ens behöver dessa metoder eftersom hibernate hanterar uppdateringarna på ihållande enheter automatiskt. Du behöver bara bry dig om övergående föremål i de flesta fall. I denna handledning diskuterar jag några tankar kring refresh() och merge() metod som finns i hibernate session class.

Refreshing Hibernate Entities Using refresh() Method

ibland står vi inför en situation där vi applikationsdatabasen ändras med någon extern applikation/agent och därmed motsvarande hibernate entity i din ansökan blir faktiskt synkroniserad med sin databasrepresentation, dvs att ha gamla data. I det här fallet kan du använda session.refresh() – metoden för att fylla i enheten med senaste tillgängliga data i databasen.

Du kan använda en av refresh () – metoderna i Sessionsgränssnittet för att uppdatera en instans av ett beständigt objekt, enligt följande:

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

dessa metoder kommer att ladda om objektets egenskaper från databasen och skriva över dem. I verkliga applikationer behöver du inte använda refresh() – metoden mycket ofta bortsett från ovan angivna scenario.

Låt oss titta på ett exempel på refresh () – metoden.

titta ovanför de markerade raderna.

  • Linje 15 spara den anställde med förnamn ”Lokesh”
  • linje 26 ange förnamnet ”Vikas”. Eftersom enheten är fristående uppdateras inte DB.
  • rad 27 uppdatera entiteten med databasen med refresh() – metoden.
  • linje 32 kontrollera att förnamn som i entity har uppdaterats med ”Lokesh” eftersom det är vad databasen har detta ögonblick.

det här handlade om uppdateringsmetod. Låt oss titta på en annan liknande metod merge().

sammanfoga Hibernate Entities med merge () – metoden

metod merge() gör exakt motsatsen till vad refresh(), dvs det uppdaterar databasen med värden från en fristående enhet. Uppdateringsmetoden uppdaterade enheten med senaste databasinformationen. Så i princip är båda exakt motsatta.

sammanslagning utförs när du vill att en fristående enhet ska ändras till persistent state igen, där den fristående enhetens ändringar migreras till (eller åsidosätter) databasen. Metodsignaturerna för sammanslagningsoperationerna är:

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

Hibernate officiell dokumentation ger en mycket bra förklaring av merge() metod:

kopiera tillståndet för det givna objektet till det ihållande objektet med samma identifierare. Om det inte finns någon ihållande instans som för närvarande är associerad med sessionen kommer den att laddas. Returnera den ihållande instansen. Om den givna instansen inte har sparats, spara en kopia av och returnera den som en nyligen beständig instans. Den givna instansen blir inte associerad med sessionen. Denna operation kaskader till associerade instanser om föreningen är mappad med cascade=”merge”.

så om jag tar under kod till exempel bör nedan angivna punkter vara tydliga för dig.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ’empEntity’ är fristående enhet när den skickas till merge () – metoden.Metoden
  • merge() söker efter en redan laddad EmployeeEntity-instans med identifieringsinformation från empEntity. Om en sådan ihållande enhet hittas kommer den att användas för uppdateringar. Annat klokt en ny EmployeeEntity laddas in session med samma identifieringsinformation som finns i’empEntity’.
  • Data kopieras från ’empEntity’ till nyfunnen/laddad enhet.
  • eftersom ny / hittad entitet är beständig sparas all data som kopieras till den från ’empEntity’ automatiskt i databasen.
  • referensen för den nya entiteten returneras från metoden merge() och tilldelas variabeln mergedEmpEntity.
  • ’empEntity’ är fortfarande fristående enhet.

i ovanstående exempel är ’mergedPersistentEmpEntity’ ny enhet som är beständig. Så om du vill ha mer förändring, gör sedan i ’mergedPersistentEmpEntity’ instans.

Det är allt för denna handledning som täcker merge() och refresh() metoder i viloläge. Kom ihåg att frågan Kan ställas som skillnad mellan merge() och refresh(), eller skillnad mellan merge() och load() etc. Var redo att stöta på någon sådan skillnad mellan intervjufrågor.

Lyckligt Lärande !!

var det här inlägget till hjälp?

Låt oss veta om du gillade inlägget. Det är det enda sättet vi kan förbättra.
Ja
Nej

i tidigare handledning lärde vi oss om att spara enheter med hjälp av save() eller saveOrUpdate() metoder i hibernate. Där lärde vi oss att du i de flesta fall inte ens behöver dessa metoder eftersom hibernate hanterar uppdateringarna på ihållande enheter automatiskt. Du behöver bara bry dig om övergående föremål i de flesta fall. I…

i tidigare handledning lärde vi oss om att spara enheter med hjälp av save() eller saveOrUpdate() metoder i hibernate. Där lärde vi oss att du i de flesta fall inte ens behöver dessa metoder eftersom hibernate hanterar uppdateringarna på ihållande enheter automatiskt. Du behöver bara bry dig om övergående föremål i de flesta fall. I…

Lämna ett svar

Din e-postadress kommer inte publiceras.