JPA fetchType.Lazy funktioniert nicht

8

Ich probiere Beispiele für fetchType.Lazy aus, aber beim Debuggen des Codes scheint fetchType.Lazy nicht zu funktionieren.

Entity-Bean: Adresse

Annotation @Basic mit Eigenschaft fetch = fetchType.Lazy auf Distriktfeld hinzugefügt.

Meine Entity-Bean ist durch folgenden Code definiert:

%Vor%

Die Methode, die obige Entity-Bean verwendet:

%Vor%

Nach dem Methodenaufruf find , als ich das Adressobjekt inspiziert habe, war es bereits mit dem Distriktfeld gefüllt.

Bitte lassen Sie mich wissen, ob mir eine Konfiguration fehlt oder ob ein Problem mit dem Code selbst besteht.

    
Shashi Shankar 09.09.2013, 08:00
quelle

4 Antworten

10

Das Problem ist, dass der Anwendungsserver bei der Verwendung in der @Basic Annotation selbst entscheiden kann, wann es besser ist, die Daten zu holen. Wie dokumentiert hier

  

Die Strategie EAGER ist eine Anforderung für die Laufzeit des Persistenzanbieters, dass der Wert unbedingt abgerufen werden muss. Die Strategie LAZY ist ein Hinweis für die Laufzeit des Persistenzanbieters.

@OneToMany - ähnliche Anmerkungen haben nach der Dokumentation das gleiche Problem, aber in diesem Fall ist es viel wahrscheinlicher, dass der JPA-Provider den FetchType-Hinweis berücksichtigt.

Andererseits könnten Sie es mit einem großen Datenfeld wie

versuchen %Vor%

, um zu sehen, ob sich etwas ändert (obwohl Ihr Anwendungsserver wiederum entscheiden kann, immer das Feld zu holen).

Um zu überprüfen, ob ein Sammlungsfeld geladen wurde, würde ich entweder die Datenbankabfrageprotokolle prüfen oder Folgendes tun:

%Vor%     
Andrei I 09.09.2013, 08:11
quelle
0

Stellen Sie sicher, dass das Weben aktiviert ist.

Ссылка

    
James 09.09.2013 14:04
quelle
0

Um laze in JPA zu initialisieren, müssen Sie eine Jar-Bibliothek aufrufen und starten, wenn es mit maven oder manuell ist. Wenn Sie beispielsweise faulenzen möchten, verwenden Sie jar in maven jar de.empulse.eclipselink Weitere Informationen Ссылка

Wenn Sie maven nicht verwenden, können Sie das jar manuell aktivieren

    
GuapoSasa 09.05.2017 16:05
quelle
-1

Derselbe Code, der in Frage gestellt wurde, funktioniert jetzt gut ..: -)

Wie Andrei sagte, fetchType.Lazy ist nur ein Hinweis auf den JPA-Container, egal ob @Basic-Annotation oder @OneToMany. Es ist völlig Sache des JPA-Containers, den Fetch-Typ als eifrig oder faul zu bestimmen.

    
Shashi Shankar 09.09.2013 17:21
quelle

Tags und Links