[Hibernate 3.0] LazyInitializationException
	
	
		Bonsoir, j'utilise la version de 3.0 de Hibernate, 
Cette dernière, utilise le lazy loading par défaut pour charger les collections d'objets.
En exécutant le code suivant (qui a pour but de récupérer les galleries auxquelles un user à accès):
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 |  
    public ArrayList<GalleryDAO> findGalleriesForMember(MemberDAO memberDAO) {
 
        // Result list
        ArrayList<GalleryDAO> galleryAL = null;
 
        try {
 
            Session session = HibernateHelper.currentSession();
 
            // Query creation
            Query query = session
                    .createQuery("from GalleryDAO as galleryDAO inner join galleryDAO.groupL as groupDAO where groupDAO in (:groupList)");
 
            // Query parameter
            query.setParameterList("groupList", memberDAO.getAccess()
                    .getGroups());  //!!!Le problème à lieu ici
 
            // Getting result list
            galleryAL = (ArrayList<GalleryDAO>) query.list();
 
        } catch (Exception e) {
            logger.logError("Erreur de requête", e);
        } finally {
            HibernateHelper.closeSession();
        }
        return galleryAL;
    } | 
 j'ai cette exception qui est levée:
	Code:
	
| 12
 3
 
 |  
2006-01-30 22:03:37,243 [http-80-Processor22] ERROR org.hibernate.LazyInitializationException - failed to lazily initialize a collection of role: com.toto.website.hibernate.pojo.AccessDAO.groups, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.toto.website.hibernate.pojo.AccessDAO.groups, no session or session was closed | 
 Le problème vient (d'après ce que j'ai pu comprendre) du fait que l'attribut "groups" de la classe "AccessDAO" qui compose "MemberDAO" ne peut être chargé à la demande dans cette session...
Alors ma première question est:
- Pourquoi?? Est ce que cela vient du fait que la session dans laquelle je travaille n'est pas la même que celle qui à loadé initialement le "MemberDAO"??
...
Ensuite en ajoutant cette ligne dans la méthode:
	Code:
	
| 12
 
 |  
session.lock(memberDAO.getAccess(), LockMode.NONE); | 
 tout rentre dans l'ordre. Cette instruction à pour but de rattacher une instance détachée à la session.
Le code est désormais le suivant:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 |  
 
    public ArrayList<GalleryDAO> findGalleriesForMember(MemberDAO memberDAO) {
 
        // Result list
        ArrayList<GalleryDAO> galleryAL = null;
 
        try {
 
            Session session = HibernateHelper.currentSession();
            session.lock(memberDAO.getAccess(), LockMode.NONE);
 
            // Query creation
            Query query = session
                    .createQuery("from GalleryDAO as galleryDAO inner join galleryDAO.groupL as groupDAO where groupDAO in (:groupList)");
 
            // Query parameter
            query.setParameterList("groupList", memberDAO.getAccess()
                    .getGroups());
 
            // Getting result list
            galleryAL = (ArrayList<GalleryDAO>) query.list();
 
        } catch (Exception e) {
            logger.logError("Erreur de requête", e);
        } finally {
            HibernateHelper.closeSession();
        }
        return galleryAL;
    } | 
 Ma seconde question est la suivante:
- Pourquoi dois je rattacher l'objet "accessDAO" et non pas le "membreDAO" directement?? En effet, l'instruction suivante ne fonctionne pas
	Code:
	
| 12
 
 |  
session.lock(memberDAO, LockMode.NONE); | 
 Si quelqu'un peut m'éclairer  :wink: