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 № 1Um 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)