Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Transaktionen und Sitzung | Grundlagen von Hibernate
Java-Datenmanipulation mit Hibernate
course content

Kursinhalt

Java-Datenmanipulation mit Hibernate

Java-Datenmanipulation mit Hibernate

1. JDBC-Übersicht
2. Grundlagen von Hibernate
3. Letzte Feinabstimmungen

book
Transaktionen und Sitzung

Derzeit haben wir in unserem Projekt 2 Entitätsklassen erstellt. Dies ist jedoch nicht ausreichend, um vollständig mit der Datenbank zu interagieren. Dieses Kapitel wird die grundlegenden Hibernate-Schnittstellen untersuchen, die es uns ermöglichen, effektiv mit Entitätsklassen und der Datenbank zu interagieren.

SessionFactory

Jeder Prozess in Hibernate hat seinen Lebenszyklus. Der Lebenszyklus eines Session-Objekts ist einer der wichtigsten und kritischsten Aspekte.

Aus der Definition kann verstanden werden, dass die Interaktion mit der Datenbank im Rahmen einer einzelnen Sitzung erfolgt. Hier ist eine vereinfachte Erklärung:

Um mit der Datenbank zu interagieren, müssen wir einen Termin (eine Sitzung öffnen) mit einem Therapeuten namens Hibernate (das Framework) vereinbaren. Aber bevor wir die Sitzung planen, muss der Therapeut die medizinische Schule absolvieren.

Im Code ist die Analogie das SessionFactory-Objekt, das, wie der Name schon sagt, als Fabrik zur Erstellung von Sitzungen dient.

Schauen wir uns die Definition an:

Es ist ganz einfach: Das SessionFactory-Interface wird verwendet, um Instanzen des Session-Interfaces zu erstellen und zu speichern.

So wird das SessionFactory-Objekt im Code unter Verwendung unserer beiden Entitätsklassen erstellt:

In der configure()-Methode geben wir die Datei an, die die Hibernate-Konfiguration enthält. Mit der Methode addAnnotatedClass() geben wir an, welche Klassen Entitäten sind. Schließlich erhalten wir mit der Methode buildSessionFactory() das SessionFactory-Objekt.

Sie könnten fragen: "Aber was, wenn wir 100 Entitätsklassen haben? Müssen wir jede einzelne in der Methode addAnnotatedClass() angeben?"

Antwort: Ja und nein. Wir können diesen Teil des Codes in die Konfigurationsklasse verschieben, indem wir alle Entitätsklassen im Körper von <session-factory> angeben.

So wird es aussehen:

Jetzt können wir unnötige Methoden loswerden, wenn wir das SessionFactory-Objekt erstellen:

Nun können wir aus dem erstellten SessionFactory-Objekt eine Session öffnen, in der wir die notwendigen Operationen durchführen:

Transaktion

Alle Datenoperationen müssen im Kontext einer Transaktion durchgeführt werden. Eine Transaktion in Hibernate gewährleistet Datenkonsistenz und -integrität. Der Entwickler ist verantwortlich für das Initiieren und Abschließen von Transaktionen.

Schauen wir uns die Definition an:

Hinweis

Eine Transaktion ist eine logische Arbeitseinheit, die eine oder mehrere Operationen auf der Datenbank umfasst. Eine Operation ist eine spezifische Aktion, die auf Daten in der Datenbank ausgeführt wird: erstellen, lesen, aktualisieren, löschen und so weiter.

Transaction-Handling sollte innerhalb eines try-catch-finally-Blocks erfolgen, da Transaktionsoperationen Ausnahmen werfen können, die sich nachteilig auf die Daten in der Tabelle auswirken können. Daher müssen wir uns absichern und im Falle eines Fehlers die Änderungen an der Tabelle zurücksetzen.

Hier sind die Hauptmethoden für die Arbeit mit Transaktionen:

  • begin() startet eine neue Transaktion. Alle nachfolgenden Operationen erfolgen innerhalb dieser Transaktion;
  • commit() bestätigt die Transaktion und speichert alle während der Transaktion vorgenommenen Änderungen. Nach dem Commit werden die Änderungen in der Datenbank reflektiert;
  • rollback() setzt alle während der Transaktion vorgenommenen Änderungen zurück, wenn ein Fehler auftritt.

Lassen Sie uns also zusammenfassen und den Algorithmus verstehen:

  • Mit dem SessionFactory-Objekt erstellen wir eine Instanz der Session-Schnittstelle;
  • Danach erstellen wir innerhalb der Sitzung ein Transaction-Objekt, innerhalb dessen wir Operationen auf der Datenbank durchführen werden;
  • Diese Operationen werden erst in der Datenbank reflektiert, wenn die commit()-Methode verwendet wird. Im Falle eines Fehlers müssen wir alle Änderungen mit der rollback()-Methode zurücksetzen;
  • Transaktionsoperationen werden innerhalb eines try-catch-finally-Blocks durchgeführt.

Schauen wir uns eine solche Implementierung im Code an:

Hier ist die Vorlage, die praktisch für jede Datenbankoperation verwendet wird.

Erstellen von SessionFactory -> Erstellen von Session -> Öffnen von Transaction -> Datenbankoperationen -> die commit()-Methode, die die Änderungen bestätigt -> Schließen von SessionFactory.

Schauen wir uns nun die Methoden zur Arbeit mit der Datenbank an.

Datenmanipulation

Betrachten wir die Hauptmethoden des Session-Interfaces zur Datenmanipulation in Hibernate.

Hinweis

Derzeit werden wir die Methoden untersuchen, wie sie von Hibernate bereitgestellt werden. Später werden wir diese Methoden als Grundlage verwenden, um unsere eigenen Methoden für die Durchführung von CRUD-Operationen zu schreiben. Zusätzlich werden wir bequemere und spezialisierte Methoden entwickeln (wie getEmployeesByName() und so weiter). Hier beginnt die interessanteste Logikentwicklung der Anwendung, die ich persönlich an Java liebe.

Beginnen wir mit den Methoden zum Speichern und Aktualisieren:

  • persist(Object entity): Speichert das Objekt in der Datenbank. Diese Methode sollte verwendet werden, wenn Sie eine neue Instanz eines Objekts speichern möchten;
  • merge(Object entity): Aktualisiert ein vorhandenes Objekt in der Datenbank oder speichert es, wenn es nicht existiert. Gibt das Objekt zurück, das möglicherweise als Ergebnis des Mergers geändert wurde.

Im Code sieht es so aus:

Im obigen Code haben wir ein neues Objekt der Department-Entitätsklasse erstellt und in der Datenbank gespeichert. Jetzt sind wir daran interessiert zu überprüfen, ob dieses Objekt gespeichert wurde.

Dazu verwenden wir Methoden zum Lesen von Daten aus der Tabelle:

  • get(Class<T> entityClass, Object id): Ruft ein Objekt anhand seiner Kennung ab. Gibt null zurück, wenn das Objekt nicht gefunden wird;
  • refresh(Object entity): Aktualisiert den Zustand des Objekts mit Daten aus der Datenbank, überschreibt alle Änderungen, die am Objekt vorgenommen wurden.

Hinweis

In Hibernate gibt es keine grundlegende Methode, um alle Elemente oder ein bestimmtes Element abzurufen. Mit Hibernate können wir nur Elemente anhand ihrer ID abrufen. Später werden wir Methoden schreiben, um alle Objekte oder bestimmte Objekte aus der Tabelle abzurufen.

Sehen wir uns die Implementierung im Code an:

Nun, lassen Sie uns über Löschoperationen sprechen. In Hibernate gibt es auch eine Kernmethode zum Löschen eines Elements, nicht nach ID, sondern vollständig als Entität. Das Löschen nach ID und andere Fälle werden später in diesem Kurs behandelt.

  • delete(Object entity): Löscht das Objekt aus der Datenbank.

Dies sind die Hauptmethoden, die wir im Moment verwenden werden. Wenn wir auf neue Methoden stoßen, die wir benötigen (zum Beispiel createQuery()), werden wir sie in der Praxis erkunden.

1. Was ist die Hauptfunktion der SessionFactory in Hibernate?

2. Wie wird eine neue Transaktion in Hibernate gestartet?

3. Welche Methode wird verwendet, um eine neue Instanz eines Objekts in der Datenbank zu speichern?

4. Welche Methode ermöglicht es Ihnen, ein Objekt anhand seiner Kennung aus der Datenbank abzurufen?

5. Was sollte getan werden, um alle während einer Transaktion vorgenommenen Änderungen im Falle eines Fehlers zurückzusetzen?

Was ist die Hauptfunktion der SessionFactory in Hibernate?

Was ist die Hauptfunktion der SessionFactory in Hibernate?

Wählen Sie die richtige Antwort aus

Wie wird eine neue Transaktion in Hibernate gestartet?

Wie wird eine neue Transaktion in Hibernate gestartet?

Wählen Sie die richtige Antwort aus

Welche Methode wird verwendet, um eine neue Instanz eines Objekts in der Datenbank zu speichern?

Welche Methode wird verwendet, um eine neue Instanz eines Objekts in der Datenbank zu speichern?

Wählen Sie die richtige Antwort aus

Welche Methode ermöglicht es Ihnen, ein Objekt anhand seiner Kennung aus der Datenbank abzurufen?

Welche Methode ermöglicht es Ihnen, ein Objekt anhand seiner Kennung aus der Datenbank abzurufen?

Wählen Sie die richtige Antwort aus

Was sollte getan werden, um alle während einer Transaktion vorgenommenen Änderungen im Falle eines Fehlers zurückzusetzen?

Was sollte getan werden, um alle während einer Transaktion vorgenommenen Änderungen im Falle eines Fehlers zurückzusetzen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 4
We're sorry to hear that something went wrong. What happened?
some-alt