wenn Lazy loading verwenden / Eager loading in hibernate?
Ich glaube, es gibt nur zwei Möglichkeiten zum laden von Objekten über Hibernate und das ist lazy loading und ist eager loading. Lazy loading hat seine eigenen Vorteile, es ist nicht geladen, viele Objekte aber nur, wenn Sie Sie benötigen. Ich habe auch gelernt, dass, wenn Sie erzwingen möchten, laden alle Kinder zu einem Objekt rufen Sie einfach die parent.getChildren().size()
. Also sagen wir mal wir haben die folgenden Objekte
@Entity
public class Customer{
public Set<Order> order;
}
@Entity
public class Order{
}
nehmen wir an, wir haben Kunden, die Aufträge in unserem system, und es kann auch mehr als ein oder sogar null. Also meine Frage ist, ist es nicht besser, immer mit eager loading ' in diesem Fall? wir brauchen die Größe oder einige Informationen für die Bestellung hinsichtlich der Kunden. Was ist der Vorteil der Verwendung von lazy loading in dieser situation, ist es irgendwelche Vorteile?
Ich versuche zu verstehen, wo Sie lazy loading verwenden und wo eager loading, schätzen Sie Ihre Einsicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind ein paar Gedanken:
1) Wenn Sie immer so etwas (sicher), Sie können eifrig laden.
2) Bezogen auf 1, wenn Sie fast nie etwas, faul laden.
3) Lazy loading ist eher nützlich, wenn die großen Sammlungen beteiligt sind.
4) Spannung laden die Dinge reduzieren, session-bezogene Fehler, auf die potenziellen Kosten einer Leistung Treffer.
5) Für komplexe Datenmodelle und/oder große Datenbanken, die Sie gehen, um zu sehen, wie die app funktioniert unter Last eine Anpassung Ihrer Strategien.
6) Es ist schwierig, es richtig zu machen die erste Zeit. Tun, was sich richtig anfühlt, und scheuen Sie sich nicht, wenn nötig zu ändern.
7) Für große Datenmengen, Sie gehen, um wahrscheinlich am Ende schreiben von benutzerdefinierten hql-Abfragen sowieso, wo die Standard-Zuordnungen überschrieben werden können, so lazy vs. eager nicht so eine große Rolle.
Wenn Sie glauben, #6, dann nicht stecken versucht zu planen, zu weit Voraus, und ändern Sie ihn gegebenenfalls.
WRT Ihren speziellen Beispiel, ich würde vermutlich schreiben, die eine Reihe von Abfragen für den Zugriff auf die Daten (gesteuert durch entsprechende business-Bedürfnisse, natürlich)
1) Eine Abfrage, die Lasten der Kunden, und lässt die Aufträge in der db (also lazy loading), dass ich nennen würde, wenn ich brauche, um die Kunden-info
2) Eine Abfrage, die Lasten des Kunden und alle bestellen info, für die Fälle, wo ich es brauche. Also in diesem Fall werde ich ignorieren Sie die Standard-mapping.
Das mit den zwei Abfragen an Ort und Stelle, in meinem service-Layer habe ich die Werkzeuge, die ich brauche, um zu tun, was richtig ist, basierend auf dem Kontext der situation.
Diese link perfekt Ihre Frage beantwortet.
LAZY loading verwendet wird, in Fällen, in denen die verknüpfte Entität Größe ist riesig und es ist nicht erforderlich, um geladen werden jedes mal, wenn auf der anderen Seite
EIFRIG verwendet werden, sollten mit der richtigen Analyse, wie es zu Lasten der Beziehung jedes mal, wenn das Haupt-entity geladen wird.
So, wenn eine Beziehung ist absolut notwendig für die business-Logik Berechnung sollten Sie daran denken, die Verwendung von EAGER loading, LAZY loading wird, dienen die meisten von den Fällen und bietet weniger performance-Probleme.