IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Lazy Loading] Exception à la lecture d une collection


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut [Lazy Loading] Exception à la lecture d une collection
    Bonjour,

    Je veux utiliser le "lazy loading" sur mes collections.
    Dans mes fichiers xml de mapping, j'ai mis des lazy true.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <hibernate-mapping package="mgpat.workflow.prevoyance.hibernate">
     
        <class name="WrkUtiActDem" table="wrk_uti_act_dem" schema="public">
            <composite-id name="id" class="WrkUtiActDemId">
     
                <key-many-to-one name="wrkUtilisateur" class="mgpat.workflow.authentification.hibernate.WrkUtilisateur">
                    <column name="uti_id" />
                </key-many-to-one>
     
     
            <set name="wrkUtiActDems" cascade="all" lazy="true">
                <key>
                    <column name="dem_id" not-null="true" />
                </key>
                <one-to-many class="WrkUtiActDem" />
            </set>
     
    </hibernate-mapping>

    Quand je remonte et lis mes collections aucun problème majeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
     Session session = HibernateUtil.openSession("rechercheAction");
     
    	       List list = ServicePrevoyance.rechercheBordereau(session, frm.getNumAdherent(), frm.getRang(), "etat", "prevBeneficiaire.id.benNumAdherent","demId");
     
    	       // on remonte  dans la boucle les données du bénéficiaire pour chaque bordereau pour éviter un plantage session ! ! !
     
    	      for(int i=0;i<list.size();i++)
    	      {
    				prevBordereau = (PrevBordereau)list.get(i);
    				prevBordereau.getPrevBeneficiaire().getBenNom();
    				//Set items = prevBordereau.getWrkUtiActDems().size();}
     
    	       return mapping.findForward(mappingStr);
       }
    Une fois la collectio nremontée, je ferme la session hibernate
    Je la relis en test pour etre sur qu elle est complétée, aucun soucis.

    Je met ma collectio ne nsession, et des que j'y accede dans ma jsp j'ai une exception classique :

    org.apache.jasper.JasperException: could not initialize proxy - the owning Session was closed
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    Je ne comprend pas l erreur, puisque dans la classe précédente, j arrive a lire ma collection, même si la session est fermée

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Le lazy loading veut dire que Hibernate ne charge que les données minimum, et que le reste sera récupéré à la demande.
    Donc dans le prermier cas (sans lazy) tes données de la collection sont remontées dès le départ. Pas de soucis de lire les données après avoir fermé la connection.
    En revanche, dans le deuxième cas, les données de la collection sont remontées de la base au moment où on en a besoin, c'est à dire quand on lit les éléments de la collection.
    Problème : à ce moment là, la connection est déjà fermée !

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    for(int i=0;i<list.size();i++)
    	      {
    				prevBordereau = (PrevBordereau)list.get(i);
    				prevBordereau.getPrevBeneficiaire().getBenNom();
    				Set items = prevBordereau.getWrkUtiActDems();
    			    Iterator dem = items.iterator();
    			    while (dem.hasNext())
    				{ 
    					WrkUtiActDem wad = (WrkUtiActDem) dem.next();
    					wad.getId().getWrkAction().getActId();
    					System.out.println(i+" : "+wad.getId().getWrkAction().getActId());
    				}	
    				prevBordereau.getWrkUtiActDems().size();
     
    			}
    Même si dans mon action j'accède a l objet le plus bas (donc je charge els objets) , impossible dans la jsp d afficher car il ya la même exception ?

    Comment faire pour l obliger a remonter tous les elements successifs puisque ?

  4. #4
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    En fait j ai inversé le lazy !
    Pour moi, et durant la formatio nque j ai eu c est ce que j avais compris , si tu mettais le lazy a true, c'est qu il devait remonter la collection (forcer)

    Alors qu'en fait c ets l inverse !
    merci

  5. #5
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    De rien ! N'oublie pas le tag

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 25/04/2014, 02h54
  2. Réponses: 0
    Dernier message: 30/08/2011, 09h12
  3. [Data] encore une question lazy loading spring hibernate
    Par Fred_Bogota dans le forum Spring
    Réponses: 3
    Dernier message: 24/10/2009, 15h31
  4. Charger une collection Lazy
    Par Faiche dans le forum JPA
    Réponses: 7
    Dernier message: 07/09/2009, 16h08
  5. Réponses: 7
    Dernier message: 14/05/2009, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo