Wann holt Hibernate tatsächlich Daten aus der DB? Beim Zugriff via Getter-Methode?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine Frage zur Funktionsweise von Hibernate. Wenn ich ein Objekt aus der Datenbank hole, dann ist es ja laut Definition ein "attached" Objekt, welches im Hintergrund durch Hibernate mit einer Proxy-Klasse gemanaged wird.

Ist es demnach richtig, dass zunächst gar keine Daten aus der DB von dem Objekt geladen werden, sondern nur, wenn ich z.B. eine Getter-Methode des besagten Objektes verwende?

Beispiel: Ich hole ein Objekt mit der id "1" vom Typ "Auto" aus der Datenbank. Nun ist mein "Auto"-Objekt quasi noch leer. Erst wenn ich nun einen Aufruf der Art "Person besitzer = "auto.getBesitzer();" mache, holt Hibernate tatsächlich die Daten?

Wenn das richtig ist, wie verhält es sich mit "verschachtelten" Verweisen? Was ist z.B., wenn der obige Besitzer noch ein Verweis auf ein Adress-Objekt hat, welches auch in der DB liegt. Würde dann "auto.getBesitzer()" auch gleich die Adresse holen, oder erst der Aufruf an "auto.getBesitzer().getAdresse()"?


Sicherlich kann man das Verhalten irgendwie konfigurieren, was ist in dem Fall der Standard?

Über eine Antwort würde ich mich sehr freuen


Vielen Dank!
 
Primitive Datentypen liest Hibernate direkt. Also alles was Strings, Integers usw. sind. Für Relationen werden die weiteren Entitäten per default lazy geladen, also erst dann wenn du das Objekt traversierst. Konfigurieren lässt sich das über den FetchType. Setzt du den auf EAGER, erzeugt Hibernate gleich einen Query mit einem Join und holt das referenzierte Objekt gleich mit.

Gruß
Ollie
 

Neue Beiträge

Zurück