/ / Lazy Loading funktioniert nicht mit Eins-zu-Eins-Zuordnung im Ruhezustand - Java, Ruhezustand, Lazy Loading, Eins-zu-Viele, Eins-zu-Eins

Lazy Loading funktioniert nicht mit Eins-zu-Eins-Zuordnung im Hibernate - Java, Hibernate, Lazy-Loading, Eins-zu-Viele, Eins-zu-Eins

Ich verweise auf diesen Link https://developer.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one um zu verstehen, warum Lazy Loading nicht funktioniert one to one funktioniert aber mit one to many.

Ich verstehe nicht, warum das SET-Objekt im Falle von eins zu vielen, wie im obigen Link angegeben, niemals null ist. Kann jemand das bitte erklären?

Ich verstehe immer noch nicht, warum das faule Laden funktioniert one to many aber nicht in one to one Vereinigungen.Bitte erläutern.

Antworten:

0 für die Antwort № 1

Um ehrlich zu sein, wusste ich bis jetzt noch nicht einmal davon, aber so verstand ich diesen Artikel.

Zum @OneToMany Hibernate erstellt einen Wrapper für den Satz, und dieser Wrapper ist niemals null. Wenn also auf der anderen Seite keine Daten vorhanden sind, handelt es sich nur um eine leere Menge, die aber immer noch nicht null ist.

Aber für @OneToOne wrapper (proxy) kann nicht verwendet werden, weil getCee() (aus dem Beispiel dieses Artikels) würde niemals null zurückgeben, was nicht richtig ist. null für diese Eigenschaft bedeutet es gibt keine übereinstimmende Zeile in der Zieltabelle, not null Das heißt, es gibt. In Anbetracht dessen ist Wrapper nur dann sinnvoll, wenn Relation obligatorisch ist (constrained=true).


0 für die Antwort № 2

Der wichtige Punkt hierbei ist der bei der ImplementierungBei einer Eins-zu-Viele-Beziehung wird die Beziehung als Set dargestellt. Dies ist eine Schnittstelle, für die Hibernate eine Implementierung bereitgestellt hat. Diese Implementierung implementiert das verzögerte Laden.

Im Fall einer Eins-zu-Eins-Zuordnung hat Hibernate jedoch zu keinem Zeitpunkt eine abgeleitete Klasse für eine beliebige Klasse implementiert, zu der die Hauptklasse eine Eins-zu-Eins-Beziehung hat.


-1 für die Antwort № 3

Der Standard-Abruftyp für eine Eins-zu-Eins-Beziehung ist Eager. Um dies zu ändern, müssen Sie das Feld mit Anmerkungen versehen als

@OneToOne(fetch=FetchType.LAZY)