get()-Methode

Wenn Sie ein Objekt anhand seiner ID (oder seines Primärschlüssels) abrufen möchten, bietet Hibernate hierfür drei Methoden:

  • Belastung()
  • erhalten()
  • finden()

Sie machen das Gleiche, aber es gibt Nuancen. Das allgemeine Format der get() -Methode ist:

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

Die get()- Methode verwendet als zweiten Parameter die ID (Primärschlüssel) des Objekts, das zurückgegeben werden muss. Anschließend lädt es das Objekt aus der Datenbank und gibt es zurück. Beispiel:

User user = session.get(User.class, 2);

Wenn ein Datensatz mit dieser ID nicht in der Datenbank gefunden wird, gibt die Methode null zurück.

Load()-Methode

Die zweite Methode zum Laden eines Objekts ist die Methode „load()“ . Das allgemeine Format der Methode „load()“ ist dasselbe:

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

Allerdings unterscheidet sich ihr Verhalten von der get()- Methode .

Erstens gibt diese Methode kein reales Objekt zurück, sondern einen Proxy: einen virtuellen Stub.

Zweitens erfolgt bei Verwendung der Methode „load()“ keine Prüfung, ob ein solcher Eintrag in der Datenbank vorhanden ist. Stattdessen erstellt Hibernate sofort ein Proxy-Objekt mit der übergebenen ID und gibt es zurück.

Drittens erfolgt die gesamte Arbeit mit der Datenbank beim Aufruf der Methoden des Proxy-Objekts. Wenn Sie beispielsweise versuchen, die Methode getName() aufzurufen , erfolgt der erste Aufruf der Datenbank. Beispiel:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

Die Methode „load()“ sollte nicht verwendet werden, um das Vorhandensein von Objekten in der Datenbank zu überprüfen – sie zeigt dies einfach nicht an. Wenn Sie ihm außerdem eine ungültige ID, z. B. null, übergeben, wird einfach null zurückgegeben.

find()-Methode

Die Methode find() wurde vom JPA-Standard an die Session- Schnittstelle übergeben. Und wie Sie wissen, beschreibt dieser Standard nicht nur die Signatur von Methoden, sondern regelt auch das Verhalten.

Diese Methode funktioniert genau wie die get()- Methode . Wenn das Objekt mit dem übergebenen Schlüssel nicht gefunden wurde, gibt die Methode einfach null zurück.

User user = session.find(User.class, -2); //method will return null

Methode „refresh()“.

Eine weitere nützliche Methode, die mit dem Laden eines Objekts aus einer Datenbank zu tun hat, ist die Methode „refresh()“ .

Erinnern Sie sich an die Methode persist() , die die Daten in der Datenbank basierend auf dem übergebenen Objekt aktualisiert hat? Die Methode „refresh()“ funktioniert also genau umgekehrt: Sie aktualisiert ein vorhandenes Objekt basierend auf Daten aus der Datenbank.

Dieses Verhalten ist notwendig, wenn beispielsweise beim Schreiben eines Objekts in die Datenbank dort verschiedene gespeicherte Prozeduren aufgerufen werden, die die geschriebenen Daten korrigieren.

In solchen Fällen kann es sinnvoll sein, das Objekt erneut aus der Datenbank zu lesen, wenn die Möglichkeit besteht, dass es sich geändert hat. Beispiel:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object