Hibernate Fusioning and Refreshing Entities

i tidligere tutorial lærte vi om at gemme enheder ved hjælp af save() eller saveOrUpdate() metoder i hibernate. Der lærte vi, at du i de fleste tilfælde ikke engang har brug for disse metoder, da hibernate automatisk administrerer opdateringerne på vedvarende enheder. Du behøver kun at bekymre sig om forbigående objekter i de fleste tilfælde. I denne tutorial, jeg diskuterer nogle tanker omkring refresh() og merge() metode til stede i dvale session klasse.

forfriskende Hibernate-enheder ved hjælp af refresh () – metoden

nogle gange står vi over for en situation, hvor vi applikationsdatabase ændres med en ekstern applikation/agent, og dermed bliver tilsvarende hibernate-enhed i din applikation faktisk ude af synkronisering med dens databaserepræsentation, dvs.at have gamle data. I dette tilfælde kan du bruge session.refresh()-metoden til at udfylde enheden igen med de nyeste data, der er tilgængelige i databasen.

Du kan bruge en af opdateringsmetoderne() på sessionsgrænsefladen til at opdatere en forekomst af et vedvarende objekt som følger:

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

disse metoder genindlæser objektets egenskaber fra databasen og overskriver dem. I virkelige applikationer behøver du ikke bruge refresh() – metoden meget ofte bortset fra ovenstående scenario.

lad os se på et eksempel på refresh() metode.

se over de fremhævede linjer.

  • linje 15 Gem medarbejderen med fornavn “Lokesh”
  • linje 26 Indstil fornavnet “Vikas”. Da enheden er løsrevet, vil DB ikke blive opdateret.
  • linje 27 Opdater enheden med database ved hjælp af refresh() metode.
  • linje 32 Kontroller, at fornavn indstillet i enhed er blevet opdateret med “Lokesh”, da det er, hvad databasen har dette øjeblik.

dette handlede om opdateringsmetode. Lad os se en anden lignende metode merge().

fletning af Hibernate-enheder ved hjælp af flet () – metoden

metode merge() gør nøjagtigt modsat hvad refresh() gør det, dvs.det opdaterer databasen med værdier fra en løsrevet enhed. Opdater metode var at opdatere enheden med nyeste databaseoplysninger. Så dybest set er begge nøjagtigt modsatte.

fletning udføres, når du ønsker at få en løsrevet enhed ændret til vedvarende tilstand igen, med den løsrevne enheds ændringer migreret til (eller tilsidesætte) databasen. Metodesignaturerne for fletningsoperationerne er:

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

Hibernate officiel dokumentation giver en meget god forklaring på merge() metode:

Kopier tilstanden af det givne objekt på det vedvarende objekt med samme identifikator. Hvis der ikke er nogen vedvarende forekomst, der i øjeblikket er knyttet til sessionen, indlæses den. Returner den vedvarende forekomst. Hvis den givne forekomst ikke er gemt, skal du gemme en kopi af og returnere den som en nyligt vedvarende forekomst. Den givne forekomst bliver ikke forbundet med sessionen. Denne operation kaskader til tilknyttede tilfælde, hvis foreningen er kortlagt med cascade=”Flet”.

så hvis jeg tager nedenstående kode for eksempel, skal nedenstående punkter være klare for dig.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ’empEntity’ er løsrevet enhed, når den overføres til fusion() metode.
  • Flet() metode vil søge efter en allerede indlæst EmployeeEntity instans med identifikator oplysninger taget fra empEntity. Hvis en sådan vedvarende enhed findes, vil den blive brugt til opdateringer. Andet klogt en ny EmployeeEntity indlæses i session ved hjælp af samme identifikationsoplysninger som til stede i ’empEntity’.
  • Data kopieres fra ’empEntity’ til ny fundet/indlæst enhed.
  • da ny/fundet enhed er vedvarende, gemmes alle data, der kopieres til den fra ’empEntity’, automatisk i databasen.
  • Reference for den nye enhed returneres fra merge () – metoden og tildeles ‘mergedEmpEntity’ – variablen.
  • ’empEntity’ er stadig løsrevet enhed.

i ovenstående eksempel er ‘mergedPersistentEmpEntity’ ny enhed, der er vedvarende. Så hvis du ønsker at nogen mere forandring, så gør i i ‘mergedPersistentEmpEntity’ instans.

Det er alt for denne tutorial dækker merge() og refresh() metoder i dvale. Husk, at spørgsmålet kan stilles som Forskel mellem merge() og refresh() eller forskel mellem merge() og load() osv. Vær klar til at støde på en sådan forskel mellem samtalespørgsmål.

Glad Læring !!

var dette indlæg nyttigt?

lad os vide, hvis du kunne lide indlægget. Det er den eneste måde, vi kan forbedre.
Ja
Nej

i tidligere tutorial lærte vi om at gemme enheder ved hjælp af save() eller saveOrUpdate() metoder i hibernate. Der lærte vi, at du i de fleste tilfælde ikke engang har brug for disse metoder, da hibernate automatisk administrerer opdateringerne på vedvarende enheder. Du behøver kun at bekymre sig om forbigående objekter i de fleste tilfælde.…

i tidligere tutorial lærte vi om at gemme enheder ved hjælp af save() eller saveOrUpdate() metoder i hibernate. Der lærte vi, at du i de fleste tilfælde ikke engang har brug for disse metoder, da hibernate automatisk administrerer opdateringerne på vedvarende enheder. Du behøver kun at bekymre sig om forbigående objekter i de fleste tilfælde.…

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.