/ / Was ist der Unterschied zwischen Lazy = "True" und Fetch = "Select" im Ruhezustand? - Hibernate, Lazy-Evaluation

Was ist der Unterschied zwischen lazy = "true" und fetch = "select" im Ruhezustand? - Hibernate, Lazy-Evaluation

Das lazy=true attribute ist das Lazy-Laden der Eltern- und Kind-Sammlungen und das Gleiche möglich fetch="select" Attribut. Gibt es einen Unterschied zwischen? lazy="true" und fetch="select" im Winterschlaf ?.

Antworten:

21 für die Antwort № 1

Ja.

Das lazy Attribut sagt Hibernate wann um die Kinder zu bekommen.

Das fetch Attribut sagt Hibernate Wie um die Kinder zu bekommen.

Wenn du sagst

Das lazy = true-Attribut ermöglicht das verzögerte Laden von Eltern und Kindern Sammlungen und dasselbe fetch = "select" -Attribut

das ist völlig falsch. Die Select-Fetch-Strategie ist NICHT das Gleiche wie das Ausschalten der Lazy Loading-Funktion. Eigentlich, aus der Dokumentation

Wählen Sie das Abrufen aus: Ein zweites SELECT wird verwendet, um das zugeordnete Objekt abzurufen Entität oder Sammlung. Es sei denn, Sie deaktivieren explizit das verzögerte Holen durch Wenn Sie lazy = "false" angeben, wird diese zweite Auswahl nur ausgeführt, wenn Sie greifen auf die Assoziation zu.


13 für die Antwort № 2

Wenn wir sagen fetch="select"Dann werden immer separate Abfragen ausgelöst, um die Verknüpfungsobjekte abzurufen, selbst wenn dies der Fall ist lazy ="false".

Aber wenn wir sagen lazy ="true", bedeutet dies, dass die Assoziationsobjekte in einer separaten Abfrage abgerufen werden, aber nicht zum Zeitpunkt des Ladens des Objekts, sondern beim ersten Zugriff auf die Assoziation. Wir können es tun, indem wir sagen list().size().

Wenn wir sagen fetch="join" Es wird immer eine einzige Abfrage ausgelöst, um die Assoziationsobjekte aus der Datenbank zu erhalten.


1 für die Antwort № 3

Um n + 1 zu lösen, wählen Sie das Problem für n Anfragen(Eltern-Kind-Beziehung) Im Hibernate verwenden wir fetch = "join" statt fetch = "select". Lazy-Einstellung legt fest, ob untergeordnete Objekte beim Laden des Parent-Objekts geladen werden. Sie müssen diese Einstellung für die jeweilige Hibernate-Mapping-Datei der übergeordneten Klasse vornehmen.Lazy = true (bedeutet, Kind nicht laden) Standardmäßig ist das verzögerte Laden der untergeordneten Objekte wahr .