Hibernate Merging and Refreshing Entities

Nel precedente tutorial, abbiamo imparato a salvare le entità utilizzando i metodi save() o saveOrUpdate() in hibernate. Lì abbiamo appreso che nella maggior parte dei casi, non avrai nemmeno bisogno di quei metodi poiché hibernate gestisce automaticamente gli aggiornamenti sulle entità persistenti. Hai solo bisogno di preoccuparsi degli oggetti transitori nella maggior parte dei casi. In questo tutorial, sto discutendo alcuni pensieri sul metodo refresh() e merge() presente nella classe di sessione hibernate.

Aggiornare le entità di ibernazione utilizzando il metodo refresh ()

A volte ci troviamo di fronte a situazioni in cui il database dell’applicazione viene modificato con qualche applicazione/agente esterno e quindi l’entità di ibernazione corrispondente nell’applicazione diventa in realtà fuori sincrono con la sua rappresentazione del database, ovvero con vecchi dati. In questo caso, è possibile utilizzare il metodo session.refresh() per ripopolare l’entità con gli ultimi dati disponibili nel database.

È possibile utilizzare uno dei metodi refresh() nell’interfaccia di sessione per aggiornare un’istanza di un oggetto persistente, come segue:

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

Questi metodi ricaricheranno le proprietà dell’oggetto dal database, sovrascrivendole. Nelle applicazioni di vita reale, non è necessario utilizzare il metodo refresh() molto spesso a parte lo scenario sopra indicato.

Diamo un’occhiata a un esempio del metodo refresh ().

Guarda sopra le linee evidenziate.

  • Riga 15 salvare il dipendente con il nome “Lokesh”
  • Riga 26 impostare il nome “Vikas”. Come entità è staccato, DB non verrà aggiornato.
  • Riga 27 aggiorna l’entità con il database utilizzando il metodo refresh().
  • Riga 32 verifica che firstname set in entity sia stato aggiornato con “Lokesh” in quanto è quello che il database ha questo momento.

Si trattava di un metodo di aggiornamento. Diamo un’occhiata a un altro metodo simile merge().

Unire entità Hibernate Usando il metodo merge ()

Il metodo merge() fa esattamente l’opposto di ciò che refresh() fa cioè aggiorna il database con i valori di un’entità distaccata. Il metodo di aggiornamento stava aggiornando l’entità con le informazioni del database più recenti. Quindi, fondamentalmente, entrambi sono esattamente opposti.

L’unione viene eseguita quando si desidera che un’entità distaccata venga nuovamente modificata in stato persistente, con le modifiche dell’entità distaccata migrate (o sovrascritte) al database. Le firme del metodo per le operazioni di unione sono:

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

La documentazione ufficiale di Hibernate fornisce un’ottima spiegazione del metodo merge():

Copia lo stato dell’oggetto dato sull’oggetto persistente con lo stesso identificatore. Se non esiste un’istanza persistente attualmente associata alla sessione, verrà caricata. Restituisce l’istanza persistente. Se l’istanza specificata non viene salvata, salvarne una copia e restituirla come nuova istanza persistente. L’istanza specificata non viene associata alla sessione. Questa operazione viene eseguita in cascata nelle istanze associate se l’associazione è mappata con cascade= “merge”.

Quindi, se prendo sotto il codice per esempio, i punti elencati di seguito dovrebbero essere chiari per te.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‘empEntity’ è un’entità distaccata quando viene passata al metodo merge ().
  • il metodo merge() cercherà un’istanza EmployeeEntity già caricata con le informazioni dell’identificatore prese da empEntity. Se tale entità persistente viene trovata, verrà utilizzata per gli aggiornamenti. Altrimenti una nuova EmployeeEntity viene caricata nella sessione utilizzando le stesse informazioni dell’identificatore presenti in ‘empEntity’.
  • I dati vengono copiati da ‘empEntity’ alla nuova entità trovata / caricata.
  • Poiché new/found entity è persistente, tutti i dati copiati da ‘empEntity’ vengono automaticamente salvati nel database.
  • Il riferimento di tale nuova entità viene restituito dal metodo merge () e viene assegnato alla variabile “mergedEmpEntity”.
  • ‘empEntity’ è ancora un’entità distaccata.

Nell’esempio precedente, ‘mergedPersistentEmpEntity’ è una nuova entità persistente. Quindi, se si desidera modificare ulteriormente, inserire l’istanza ‘mergedPersistentEmpEntity’.

Questo è tutto per questo tutorial che copre i metodi merge() e refresh() in hibernate. Ricorda che la domanda può essere posta come differenza tra merge() e refresh() , o differenza tra merge()e load() ecc. Siate pronti a incontrare qualsiasi tale differenza tra le domande di intervista.

Buon apprendimento !!

Questo post è stato utile?

Fateci sapere se ti è piaciuto il post. E ‘ l’unico modo per migliorare.
No

Nel precedente tutorial, abbiamo imparato a salvare le entità utilizzando i metodi save() o saveOrUpdate() in hibernate. Lì abbiamo appreso che nella maggior parte dei casi, non avrai nemmeno bisogno di quei metodi poiché hibernate gestisce automaticamente gli aggiornamenti sulle entità persistenti. Hai solo bisogno di preoccuparsi degli oggetti transitori nella maggior parte dei casi.…

Nel precedente tutorial, abbiamo imparato a salvare le entità utilizzando i metodi save() o saveOrUpdate() in hibernate. Lì abbiamo appreso che nella maggior parte dei casi, non avrai nemmeno bisogno di quei metodi poiché hibernate gestisce automaticamente gli aggiornamenti sulle entità persistenti. Hai solo bisogno di preoccuparsi degli oggetti transitori nella maggior parte dei casi.…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.