wieder hibernate und wieder queries.

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Hallo nochmal,

ich hab schonwieder ein Problem mit den HQL-Queries.

Das ist der Code
Code:
Player p = null;
		Query q = session.createQuery("select p from Player p WHERE p.id ="+id);
		p = (Player)q.uniqueResult();

Wenn die ID nicht existiert, dann ist alles in Ordnung. Wenn die ID existiert, dann fliegt er in der letzten Zeile raus mit der Exception:
org.hibernate.HibernateException: CGLIB Enhancement failed: oracleTest.wm.Team
... caused by:
java.lang.InstantiationException: oracleTest.wm.Team$$EnhancerByCGLIB$$68cd759d

In der Klasse Player gibt es einen Fremdschlüssel (Team). Anscheinend kann er das nicht instanzieren, aber ich weiß nicht warum.

Gruß, Gilbert

PS: Andersrum funktioniert es übrigens, also wenn ich ein Team lade, hat er die Player auch
 
na wenn dir der fehlte, dann vielleicht auch in Team, wovon die Fehlermeldung handelt,

außerdem mal versuchen, an gleicher Stelle selber ein Player- und ein Team-Objekt zu erzeugen,
vielleicht werden die Klassen erst in diesem Moment initialisiert und es treten Exceptions bei statischen Variablen oder in den Konstruktoren auf

in der API steht übrigens nur ein Grund für die InstantiationException:
Thrown when an application tries to create an instance of a class using the newInstance method in class Class, but the specified class object cannot be instantiated because it is an interface or is an abstract class.

in der Hibernate-FAQ:
I get org.hibernate.HibernateException: CGLIB Enhancement failed: <classname>?

If you use lazy loading with proxies (default for all classes in Hibernate 3), Hibernate needs to subclass your class at runtime. It can't do this if you have a private no-argument constructor. As per documentation, at least package visibility is required.
http://www.hibernate.org/116.html#A6
 
Vielen Dank für den Hinweis.
Ich hab jetzt mal bei Player den FetchType auf Eager gesetzt und so funktioniert es auch.
Aber ich verstehe den Zusammenhang mit der Package visibility nicht. Welches Package muss wo sichtbar sein?
 
der Konstruktor darf nicht private sein,
'package visibility' heißt 'gar kein Modifer', protected und public sind noch öffentlicher
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben