Was verursacht org.hibernate.PropertyAccessException: Ausnahme innerhalb des Setter aufgetreten

7

Was diese Ausnahme verursacht, kann ich nicht herausfinden.

%Vor%

Hauptursache:

%Vor%

Code:

%Vor%

Ich initialisiere Tags im Konstruktor:

%Vor%

BEARBEITEN

Ausnahme von der Protokollierungsmethode:

%Vor%     
LuckyLuke 20.04.2013, 20:05
quelle

4 Antworten

15

Meine Annahme ist, dass Hibernate Ihren Setter mit seiner eigenen Implementierung von Set (PersistentSet) aufruft, die Lazy-Loading implementiert und noch nicht initialisiert ist, wenn der Setter aufgerufen wird. Da Sie eine Methode für diese Gruppe aufrufen, lädt sie die Gruppe selbst, während sie sich bereits in einer Ladephase befindet, wodurch Hibernate in einen inkonsistenten Zustand versetzt wird.

Deshalb bevorzuge ich den Feldzugriff über den Eigenschaftszugriff (d. h. setze alle Mapping-Annotationen auf Felder und nicht auf Getters). Sie möchten eine Kopie des übergebenen Satzes erstellen, wenn die Methode mit "normalem" Code aufgerufen wird, aber Sie möchten dies nicht tun, wenn Hibernate selbst den Setter aufruft: Es bricht vollständig das Lazy-Loading ab.

    
JB Nizet 20.04.2013, 20:29
quelle
3

Sie übergeben null als Argument der Methode, also for-jedes Konstrukt löst eine Ausnahme aus. Benutze eine Schutzbedingung und alles geht gut:

%Vor%

aber ich bevorzuge:

%Vor%     
Amir Pashazadeh 20.04.2013 21:03
quelle
2

Von javadoc :

  

Beim Zugriff auf eine Eigenschaft einer Instanz von a ist ein Problem aufgetreten   persistente Klasse durch Reflexion oder über CGLIB. Es gibt eine Reihe von   mögliche zugrunde liegende Ursachen, einschließlich

%Vor%

Ich würde sagen, this.tags (Feld) oder tags (Parameter) ist null , aber um es herauszufinden, können Sie den gesamten Stack-Trace drucken, dies würde auf die Ursache hinweisen.

    
Francisco Spaeth 20.04.2013 20:08
quelle
1

Das herauszufinden ist am einfachsten, wenn Sie die Interna von setTags in einen try-Catch einbinden und alle Ausnahmen mit dem von Ihnen gewählten Protokollierungssystem protokollieren.

Meine erste Vermutung ist, dass die Variablenvariable der Tags null ist. Ich wäre sehr überrascht, wenn das nicht der Fall wäre, aber es sollte trivial sein, einen Debugger in einem Integrationstest zu verifizieren

Meine zweite Vermutung wäre, dass das Argument, das an setTags () übergeben wurde, nicht korrekt initialisiert wird, oder null ist, oder irgendeine Art von Ausnahme auslöst, wenn Ihre for-Schleife versucht, darauf zu iterieren.

    
Paul Sanwald 20.04.2013 20:17
quelle

Tags und Links