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 :

Problème de chargement de collection


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Points : 54
    Points
    54
    Par défaut Problème de chargement de collection
    Je n'arrive pas a charger une collection avec une requete HQL simple, je debut en hibernate alors je dois bien avoir fait une erreur bete quelque part...
    J'ai une BD contenant une table Cluster qui contient de champs ID, size, representant, et sessions. Le dernier étant une liste que je veut recupérer. Les collections ne sont pas fetché et le lazy reste a true parce que les données sont assez volumineuses et je veut pouvoir charger une liste de sessions contenue dans un cluster à la demande...

    Voici le mapping de cluster :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="data">
      <class name="Cluster" lazy="false">
      		<id name="id">
    			<generator class="native" />
    		</id>
     
    		<property name="size"/>
     
    		<many-to-one name="representant" not-null="true" cascade="all"/>
     
    		<list name="sessions" lazy="false">
                <key column="id"/>
                 <index column="idx"/>
                <many-to-many unique="true" class="SessionCluster" />
            </list>   
     
      </class>
     
        <query name="cluster.parID">
    	<![CDATA[
    	 from Cluster c where c.id=?
         ]]>
        </query>
        <query name="listSession.parID">
    	<![CDATA[
         select c.sessions from Cluster c where c.id=? 
         ]]>
        </query>
     
    </hibernate-mapping>
    Voici la partie ou est appelé la query :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public List<Session> getListSession(long id)
    	{
    		org.hibernate.Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		List<Session> listSession = session.getNamedQuery("listSessions.parID").setLong(0,id).list();
    		session.getTransaction().commit();
    		return listSession;
     
    	}
    Cette partie est contenue dans un BeanCluster. J'instancie ce bean et japelle la methode ci dessus avec un ID que je connais pour récupérer ma liste de sessions. Mais je ne récupère qu'une liste vide....
    Voila si qqun voit pourquoi merci de m'aider...

  2. #2
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    Le fetch mode lazy est a true ou a false ? Dans tion code il est a false mais tu dit qu'il reste a true ... C'est quoi la bonne réponse ?^^

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Points : 54
    Points
    54
    Par défaut
    Lol oui pardon je faisai des test quand je copiais le code mais justement bizarrement quand je met le lazy a false toute les collections sont chargé normalement (mais sessions contient ensuite d'autres collections donc le temps de chargement est vraiment trop long). Par contre la requete me renvoit quand meme une liste vide [] que mon lazy soit a true ou false..

    Any idea?

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Points : 54
    Points
    54
    Par défaut
    Bon bah si ca interesse qqun j'ai trouvé au cours de mes recherches la solution à mon problème, il suffit de rattacher l'objet à la session avec un lock :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public List<Object> getListSession(Cluster cluster)
    	{
    		org.hibernate.Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
     
    		session.lock(cluster, LockMode.NONE);
     
    		List<Object> listSession = session.getNamedQuery("clusterSessions.parID").setLong(0,cluster.getId()).list();
    		session.getTransaction().commit();
    		return listSession;
     
    	}

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 938
    Points : 4 359
    Points
    4 359
    Par défaut
    Citation Envoyé par nephen Voir le message
    Bon bah si ca interesse qqun j'ai trouvé au cours de mes recherches la solution à mon problème, il suffit de rattacher l'objet à la session avec un lock :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public List<Object> getListSession(Cluster cluster)
    	{
    		org.hibernate.Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
     
    		session.lock(cluster, LockMode.NONE);
     
    		List<Object> listSession = session.getNamedQuery("clusterSessions.parID").setLong(0,cluster.getId()).list();
    		session.getTransaction().commit();
    		return listSession;
     
    	}
    utiliser lock suppose que vous considérez que personne (== un autre utilisateur…) n'a modifié "cluster" (càd la version stockée en DB…) entre temps… et donc que la copie en mémoire est certainement la même que celle en DB…

    en cas de doute à ce sujet, utilisez plutôt "merge"…

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Points : 54
    Points
    54
    Par défaut
    Ok, je ne connais pas encore grand chose à hibernate, merci de l'explication!

  7. #7
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    mais justement bizarrement quand je met le lazy a false toute les collections sont chargé normalement
    c'est le principe ^^ En lazy les collections ne sont pas chargées.

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

Discussions similaires

  1. [OC][ASE]Problème de chargement de pilote ODBC
    Par Joce dans le forum Sybase
    Réponses: 10
    Dernier message: 06/01/2006, 09h08
  2. problème de chargement dll
    Par tophque dans le forum MFC
    Réponses: 8
    Dernier message: 18/11/2005, 15h14
  3. [SQL*Loader] Problème de chargement de nombres
    Par sebduth dans le forum Oracle
    Réponses: 10
    Dernier message: 18/11/2005, 10h07
  4. [FLASH 8] Problème de chargement de swf
    Par memess dans le forum Flash
    Réponses: 3
    Dernier message: 17/11/2005, 09h41
  5. Problème de chargement de police de caractères
    Par Laurent Gomila dans le forum Windows
    Réponses: 4
    Dernier message: 19/08/2004, 16h11

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