Hibernate Fragen zu Lazy Loading

ozan

Mitglied
Hallo Community,

ich habe bald ein Vorstellungsgespräch (neues Kapitel in meinem Leben :) ) und habe eine kleine Aufgabe zur Vorbereitung bekommen, die ich in 3-5 Folien (10 Minuten) präsentieren muss. Dabei muss ich einen Überblick zu Hibernate ORM geben. Danach soll ich im Detail erklären, wie der Lazy Loading Mechanismus in Hibernate funktioniert, für den ich die Vor- und Nachteile aufzählen muss. Dazu soll ich dann aber auch erzählen, was das Problem bei Lazy Loading ist. Zum Abschluss soll ich dann mind. 2 verschiedene Lösungsansätze zur Vermeidung dieses Problems aufzählen.

Ich habe mich natürlich über Hibernate und Lazy Loading etwas schlau gemacht:
Hibernate ist ein Persistenzframework für Java. Lazy Loading lädt für den Anfang nur die relevanten Objekte, später benötigte Dateien werden einfach nachgeladen.

Vorteile: Performanz, was noch?
Nachteile: Gibt es sicherlich, aber welche? Was genau passiert, wenn man die Kindobjekte von der Elternklasse nachlädt? Wird über die Kindobekte iteriert und alles wird nachgeladen? Wie kann ich mir das vorstellen?

Was genau ist das Problem bei Lazy Loading? Ich habe noch nie damit gearbeitet und kann mir nicht vorstellen, welches explizite Problem auftreten kann.

Kennt Ihr mind. 2 Alternativen zur Vermeidung des Problems?

Ich freue mich über Eure Antworten!

Liebe Grüße
Ozan
 

stg

Top Contributor
Man will vermutlich auf das "N+1"-Problem zu sprechen kommen. Wenn du danach bei Google suchst, solltest du genügend Antworten auf all deine Fragen finden.
 

ozan

Mitglied
Servus stg,

Danke für Deine Antwort. Habe das eben auch rausgefunden, dass es dieses Problem gibt. Lese gerade darüber.
Zu den Vorteilen fällt mir sowas ein (auch nach Recherche):
  • Weniger Speicherverbrauch, da nur die nötigsten Daten abgerufen werden
  • Weniger Anlaufzeit der Anwendung
  • Unnötige SQL-Anweisungen werden vermieden
Ein Nachteil fällt mir bis jetzt immer noch nicht ein :/ Vielleicht, dass dann der Code komplexer wird? Kann das sein?
 

stg

Top Contributor
Nö, der Code wird nicht komplexer. Der Zugriff auf die Daten erfolgt vollkommen transparent. Du bekommst im Code gar nicht mit, ob du auf ein Objekt direkt zugreifst oder aber nur auf ein Proxy, welches nachträglich initialisiert wird.

Wenn du Daten nicht brauchst, ist es natürlich von Vorteil, wenn diese gar nicht erst geladen werden. Wenn du allerdings auf diese Daten zugreifen willst, dann wäre es doch sinnvoller, diese direkt mitzuladen?!
Statt Vor- und Nachteile aufzuzählen (was mMn nicht wirklich sinnvoll ist) würde ich an deiner Stelle eher gegenüberstellen, was die Unterschiede zwischen Eager- und Lazy-Loading ausmacht. Wann nutzt man das eine und wann das andere? Welche Folgen hat die Wahl des FetchTypes jeweils?
 

ozan

Mitglied
Ein Proxy? Wie kann ich das verstehen? Was geschieht denn bei Lazy Loading im Detail? Wird dabei erst die nötige Klasse geladen und im Hintergrund noch was offen gelassen (joins?), um bei Bedarf direkt darauf zugreifen zu können? Kannst Du mir sagen, was genau im Detail passiert?

Eager Loading würde mMn Sinn bei kleineren Anwendungen mit wenigen Abhängigkeiten Sinn machen. Lazy Loading eben bei größeren, wo nicht alle abhängigen Daten, unter Umständen mehrere Tausend Zeilen in der Datenbank, gebraucht werden.

Danke Dir..
 

Joose

Top Contributor
Ein Nachteil: Ein Objekt wird am Anfang geladen (nur die benötigten Daten) ... sollen dann viele Daten nachgeladen werden, so kann es je nach Daten natürlich zu kurzen Wartezeiten kommen.
 

Ähnliche Java Themen


Oben