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 :

Chargement tardif collections ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut Chargement tardif collections ?
    Bonjour,

    Voila j'ai un mapping de ce type :

    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
    <hibernate-mapping>
        <class name="com.Code" table="CODE" schema="XXX">
            <id name="id" type="string">
                <column name="ID_ID" length="8" />
                <generator class="assigned" />
            </id>
            <property name="www" type="string" >
                <column name="WWW_ID" length="8" />
            </property>
            <set name="staffs" table="STAFFEURS" lazy="true" >
    	<key>
                    <column name="STAFFEUR_ID" length="8" not-null="true" />
                </key>
    	<many-to-many column="STAFF_ID" class="com.Staff" />
        	</set>
          </class>
    </hibernate-mapping>

    Je n'ai aucun problème sur le select ni l'update. Mon seul probleme est que la liste est chargé a chaque fois. J'ai environ 4000 enregistrements dans la table et la liste est composé d'une 100aine d'objet je vous laisse imaginer la lenteur. Alors que je ne souhaite recuperer que la liste des Codes!

    J'aimerais donc que la liste ne soit chargé que lorsque je le souhaite, mais je n'arrive pas, malgrès le lazy = "true".

    Je charge tous mes objets comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    results = session.createCriteria(Code.class).list();

    Si quelqu'un a une idée ou a deja été confronté à ce problème....

    Merci

  2. #2
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Je connais surtout Hibernate3, mais les concepts doivent être les mêmes:
    1- pourquoi ne pas faire un chargement lazy de ta liste n-n ?
    2- tu peux aussi faire seulement un lien ManyToOne de staffeurs vers code, et charger seulement les staffeurs pour un code donné.

  3. #3
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Euh je travail bien avec hibernate3!

    Pour le 1, c'est pas ce que j'ai marquer?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <set name="staffs" table="STAFFEURS" lazy="true" >
    Pour le 2, je crois que ce n'est pas ce que je veux. En faite j'ai pour un code donné une liste de staff. Et pour un staff je peux avoir plusieurs codes.

    Donc j'ai une table de jointure. Quand je suis sur un staff pas besoin de recupérer les codes, mais la dans mon cas je recupere la liste des codes et la il charge la liste de tous les staff. Alors que je ne veux recuperer la liste des staff qu'une fois que j'ai choisi un code en particulier.

  4. #4
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Oups, désolé !!

    Je ne connais pas les Criteria, je préfère passer par les requêtes HQL.
    Par contre, quands tu dis
    je recupere la liste des codes et la il charge la liste de tous les staff
    , est-ce que tout ceci se fait sur l'appel du Criteria, ou bien fais-tu des traitements après récupération des codes ?
    Ce que je peux te dire, c'est que le lazy est bien respecté à la sortie d'une requête HQL, à savoir quand je cloture une transaction, les elements de la liste ne sont pas chargés. D'où ma question sur de potentiels traitements annexes...

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Justement le problème est la c'est que tous est charger avec cette seule ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    results = session.createCriteria(Code.class).list();
    Je vais p'etre essayer de passer en HQL voir si le problème persiste. Ca m'embete car j'ai fait toute l'appli en criteria et il va y avoir une tache,

    Peut-etre que les criteria sont bugger au niveau du lazy pour une collection car pour le reste ca fonctionne parfaitement!

  6. #6
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Juste une question, Tu dis que tu as une relation n-n. Comme je ne suis pas habitué au mapping XML, peux- tu me préciser si la classe Staffeur connais la classe Code. En gros, existe-t-il le lien explicite Staffeur->Code ?
    Si oui, il se peut que si Hibernate connait ce lien et s'il n'est peut-être pas déclaré lazy, alors cela impliquerait le chargement de l'ensemble des données.
    çà fait bcp de si, mais je ne vois pas trop autrement.
    Ce que tu peux faire, c'est te mettre en mode debug SQL, et voir les requêtes générées pour avancer un peu. C'est perso ce que je fais quand j'ai des problèmes de perfs.

Discussions similaires

  1. [nHibernate] Probleme au chargement des collections
    Par m3z91 dans le forum NHibernate
    Réponses: 3
    Dernier message: 05/10/2010, 15h25
  2. Problème de chargement de collection
    Par nephen dans le forum Hibernate
    Réponses: 6
    Dernier message: 04/07/2008, 11h54
  3. Réponses: 4
    Dernier message: 07/02/2008, 12h34
  4. Chargement de mes collections une fois pour toutes
    Par lbrun79 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2007, 13h17
  5. Chargement tardif parametre
    Par DJogre dans le forum Hibernate
    Réponses: 4
    Dernier message: 14/03/2007, 14h28

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