anthony wrote:
utilise fetch dans une requete plutot que initialize, c'est plus propre
voilà ce que je fais :
dans mon fichier hbiernate.cfg.xml:
<property name="hibernate.max_fetch_depth">1</property>
dans Département.hbm.xml:
<set name="Ressources" inverse="true" lazy="true" fetch="join">
<key column="DEPARTEMENT_ID" not-null="false" />
<one-to-many class="fr.icdc.dei.fwk.sample.dto.Ressource" />
</set>
dasn Ressource.hbm.xml :
<many-to-one name="Departement" class="fr.icdc.dei.fwk.sample.dto.Departement" fetch="join">
<column name="DEPARTEMENT_ID" not-null="true" />
</many-to-one>
ma fonction :
public Collection findAllDepartement() {
String query = "from Departement order by Libl";
Session sess = HibernateUtil.currentSession();
List list = sess.createQuery(query)
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Departement D1 = (Departement) iter.next();
Iterator iter1 = D1.getRessources().iterator();
//Hibernate.initialize(iter1);
}
HibernateUtil.closeSession();
return list;
}
dans mon main :
DepartementDAOImpl DDD = new DepartementDAOImpl();
Collection departements = DDD.findAllDepartement();
Iterator iter = departements.iterator();
while(iter.hasNext()){
Departement D1 = (Departement) iter.next();
System.out.println(D1.getLibl());
System.out.println("taille des ressources : "+D1.getRessources().size());
Iterator iter1 = D1.getRessources().iterator();
while(iter1.hasNext()){
System.out.println(iter1.next());
//Ressource R = (Ressource) iter.next();
//System.out.println(R.getId());
}
}
dans le fichier de mapping :
J'ai donc rajouté fetch=join
Mais je suis obligé faire ceci:
while(iter.hasNext()){
Departement D1 = (Departement) iter.next();
Iterator iter1 = D1.getRessources().iterator();
//Hibernate.initialize(iter1);
}
sinon j'ai une lazyexception.
peut tu m'expliquer pourquoi?