[hibernate]Problème de récupération d'objet...
Salut a tous... je lance une servlet appelant un ejb permettant de récupérer une liste de personnes à partir d'une requête hibernate..
Sachant ke ma liste contient des objets de types Person contenant eux memes une liste d'ActivityPerson.. Actuellement j arrive à récupérer des objets de types ActivityPerson avec le bon id mais qd j essai d'accéder a cette objet, il me met cette Exception:
Code:
1 2 3 4 5 6 7 8 9 10 11
| 5 juil. 2005 15:04:31 org.hibernate.LazyInitializationException <init>
GRAVE: could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:50)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at crmCalDev.model.crm.personn.moral.Company$$EnhancerByCGLIB$$a05f64a7.getName(<generated>)
at crmCalDev.model.crm.personn.physic.ActivityPerson.toString(ActivityPerson.java:133)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at java.io.PrintStream.println(Unknown Source) |
Est ce ke ca voudrait dire ke j serai obligé de récupérer les id à partir de ma GUI java et de relancer une requete permetant de recuperer les informations de l'objet ActivtyPerson correspondant à l'id?
[resolu][hibernate]Problème de récupération d'objet...
bon j ai resolu le problème aprés de jour de combat intensif avec mon collègue...
En fait le lazyInitilizationException est du o fait que les objets contenu dans l'objet chargé ne sont po initialisés...
Pour cela , il fo utiliser soit le "setFetchMode=join" en s'assurant d'avoir ajouter la propriété fetch=join aux fichiers de mapping dans les classes concernées...
ou d'utiliser une requete HQL avec un "fetch join"
Voici un exemple de fonction hibernate pour précharger tous les objets en une seule fois avec criteria...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public List loadList(){
List list=null;
Session session = HibernateUtil.currentSession();//Ouverture de session
session.setFlushMode(FlushMode.AUTO);
Person p;
Criteria crit=session.createCriteria(Person.class);
crit.setFetchMode("activityperson",FetchMode.JOIN);
list=crit.list();
HibernateUtil.closeSession();
return list;
} |
Ici avec le Criteria...
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public List loadList(){
List list=null;
Session session = HibernateUtil.currentSession();//Ouverture de session
session.setFlushMode(FlushMode.AUTO);
String query= "from Person P1 left join fetch P1.activityPerson left AP1 join fetch AP1.company";
list=session.createQuery(query).list();
HibernateUtil.closeSession();
return list;
} |
Voili voilou...