Zusammenführen und Aktualisieren von Entitäten im Ruhezustand

Im vorherigen Lernprogramm haben wir gelernt, Entitäten mit den Methoden save() oder saveOrUpdate() im Ruhezustand zu speichern. Dort haben wir erfahren, dass Sie in den meisten Fällen diese Methoden nicht einmal benötigen, da Hibernate die Aktualisierungen persistenter Entitäten automatisch verwaltet. In den meisten Fällen müssen Sie sich nur um vorübergehende Objekte kümmern. In diesem Tutorial diskutiere ich einige Gedanken zu den Methoden refresh() und merge(), die in der Hibernate-Sitzungsklasse vorhanden sind.

Aktualisieren von Hibernate-Entitäten mit der refresh () -Methode

Manchmal treten Situationen auf, in denen die Anwendungsdatenbank mit einer externen Anwendung / einem externen Agenten geändert wird und die entsprechende Hibernate-Entität in Ihrer Anwendung tatsächlich nicht mehr mit der Datenbank synchronisiert ist Darstellung, dh mit alten Daten. In diesem Fall können Sie die Methode session.refresh() verwenden, um die Entität mit den neuesten in der Datenbank verfügbaren Daten zu füllen.

Sie können eine der refresh() -Methoden auf der Sitzungsschnittstelle verwenden, um eine Instanz eines persistenten Objekts wie folgt zu aktualisieren:

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

Diese Methoden laden die Eigenschaften des Objekts aus der Datenbank neu und überschreiben sie. In realen Anwendungen müssen Sie die refresh() -Methode nicht sehr oft verwenden, abgesehen vom oben genannten Szenario.

Schauen wir uns ein Beispiel der refresh() -Methode an.

Schauen Sie über die hervorgehobenen Linien.

  • Zeile 15 Speichern Sie den Mitarbeiter mit dem Vornamen „Lokesh“
  • Zeile 26 Legen Sie den Vornamen „Vikas“ fest. Da die Entität getrennt ist, wird die Datenbank nicht aktualisiert.
  • Zeile 27 aktualisieren Sie die Entität mit der Datenbank mit der Methode refresh().
  • Zeile 32 Überprüfen Sie, ob der in der Entität festgelegte Vorname mit „Lokesh“ aktualisiert wurde, da dies die Datenbank in diesem Moment ist.

Hier ging es um die Refresh-Methode. Schauen wir uns eine andere ähnliche Methode an merge() .

Das Zusammenführen von Hibernate-Entitäten mit der merge() -Methode

Methode merge() bewirkt genau das Gegenteil von dem, was refresh() tut, dh es aktualisiert die Datenbank mit Werten einer getrennten Entität. Die Aktualisierungsmethode aktualisierte die Entität mit den neuesten Datenbankinformationen. Also im Grunde sind beide genau entgegengesetzt.

Das Zusammenführen wird ausgeführt, wenn eine getrennte Entität wieder in den persistenten Status geändert werden soll, wobei die Änderungen der getrennten Entität in die Datenbank migriert (oder überschrieben) werden sollen. Die Methodensignaturen für die Zusammenführungsoperationen sind:

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

Die offizielle Hibernate-Dokumentation gibt eine sehr gute Erklärung der merge() -Methode:

Kopieren Sie den Status des angegebenen Objekts auf das persistente Objekt mit demselben Bezeichner. Wenn der Sitzung derzeit keine persistente Instanz zugeordnet ist, wird sie geladen. Gibt die persistente Instanz zurück. Wenn die angegebene Instanz nicht gespeichert ist, speichern Sie eine Kopie und geben Sie sie als neu persistente Instanz zurück. Die angegebene Instanz wird nicht mit der Sitzung verknüpft. Dieser Vorgang wird zu zugeordneten Instanzen kaskadiert, wenn die Zuordnung mit cascade=“merge“ zugeordnet ist.

Wenn ich also zum Beispiel den folgenden Code nehme, sollten Ihnen die unten aufgeführten Punkte klar sein.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‚ empEntity‘ ist eine abgelöste Entität, wenn sie an die merge () -Methode übergeben wird.
  • Die merge() -Methode sucht nach einer bereits geladenen EmployeeEntity-Instanz mit Bezeichnungsinformationen aus empEntity. Wenn eine solche persistente Entität gefunden wird, wird sie für Aktualisierungen verwendet. Andernfalls wird eine neue EmployeeEntity mit denselben Bezeichnungsinformationen wie in ‚empEntity‘ in die Sitzung geladen.
  • Daten werden von ‚empEntity‘ in eine neu gefundene / geladene Entität kopiert.
  • Da die neue / gefundene Entität persistent ist, werden alle Daten, die von ‚empEntity‘ darauf kopiert wurden, automatisch in der Datenbank gespeichert.
  • Die Referenz dieser neuen Entität wird von der merge() -Methode zurückgegeben und der Variablen ‚mergedEmpEntity‘ zugewiesen.
  • ‚empEntity‘ ist immer noch eine getrennte Entität.

Im obigen Beispiel ist ‚mergedPersistentEmpEntity‘ eine neue Entität, die persistent ist. Wenn Sie also weitere Änderungen vornehmen möchten, nehmen Sie die Instanz ‚mergedPersistentEmpEntity‘ vor.

Das ist alles für dieses Tutorial, das die Methoden merge() und refresh() im Ruhezustand behandelt. Denken Sie daran, dass die Frage als Differenz zwischen merge() und refresh() oder als Differenz zwischen merge() und load() usw. gestellt werden kann. Seien Sie bereit, einen solchen Unterschied zwischen Interviewfragen zu begegnen.

Viel Spaß beim Lernen !!

War dieser Beitrag hilfreich?

Lassen Sie uns wissen, ob Ihnen der Beitrag gefallen hat. Nur so können wir uns verbessern.
Ja
Nein

Im vorherigen Lernprogramm haben wir gelernt, Entitäten mit den Methoden save() oder saveOrUpdate() im Ruhezustand zu speichern. Dort haben wir erfahren, dass Sie in den meisten Fällen diese Methoden nicht einmal benötigen, da Hibernate die Aktualisierungen persistenter Entitäten automatisch verwaltet. In den meisten Fällen müssen Sie sich nur um vorübergehende Objekte kümmern. In diesem Tutorial…

Im vorherigen Lernprogramm haben wir gelernt, Entitäten mit den Methoden save() oder saveOrUpdate() im Ruhezustand zu speichern. Dort haben wir erfahren, dass Sie in den meisten Fällen diese Methoden nicht einmal benötigen, da Hibernate die Aktualisierungen persistenter Entitäten automatisch verwaltet. In den meisten Fällen müssen Sie sich nur um vorübergehende Objekte kümmern. In diesem Tutorial…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.