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 :

Récupération de données many-to-many


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut Récupération de données many-to-many
    Bonjour,

    je crée un petite appli pour gérer des tables de jeux et des joueurs. J'ai créé deux classes : personne et table.
    La classe personne contient des données propres aux joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private Long id;
    	private String nom;
    	private String adresse;
    	private String telephone;
    	private String mail;
    	private String fonction;
    et la classe table les données aux tables et une liste de joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private Long id;
    	private Long numero;
    	private Long mj;
    	private Long jeu;
    	private String jour;
     
    	private Set pjs = new HashSet();
    Mes classes corresepondent chacune à une table en bdd et il exite une table LESTABLES_PERSONNES qui fait le lien :
    personne.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <hibernate-mapping>
    	<class name="persist.Personne" table="PERSONNES">
    		<id name="id" column="PERS_ID">
    			<generator class="native"/>
    		</id>
    		<property name="nom"/>
    		<property name="adresse"/>
    		<property name="telephone"/>
    		<property name="mail"/>
    		<property name="fonction"/>
    	</class>
    </hibernate-mapping>
    table.hbm.xml :
    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="persist.Table" table="LESTABLES">
    		<id name="id" column="LESTABLES_ID">
    			<generator class="native"/>
    		</id>
    		<property name="numero"/>
    		<property name="mj"/>
    		<property name="jeu"/>
    		<property name="jour"/>
     
    		<set name="pjs" table="LESTABLES_PERSONNES">
    			<key column="LESTABLE_ID"/>
    			<many-to-many column="PERS_ID" class="persist.Personne"/>
    		</set>
    	</class>
    </hibernate-mapping>
    J'arrive bien à ajouter des joueurs par contre je n'arrive pas à récupérer des données.

    J'ai actuellement deux problèmes :
    1. J'assaie d'afficher toutes mes tables. Pour ça je fait une requète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List resultat=session.createQuery("FROM Table").list();
    Puis j'essaie de récupérer les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (int i=0; i< size; i++){
    	Table table=(Table) tableList.get(i);
    J'arrive bien à tout récupérer sauf mes joueurs. Pour l'instant j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Iterator j=table.getPjs().iterator();
    int temp=7;
    while(j.hasNext()){
    	temp=temp+1;
    	tableauTables[i][temp]=j.next().toString();
    }
    J'ai une erreur à la ligne de déclaration de l'itérateur...

    2- mon second problème se situe dans la récupération des tables de jeux avec un joueur bien précis. La relation étant many-to-many ça doit être possible mais je vois vraiment pas comment faire. Peut-être faut-il déclarer quelque chose en plus?

    Je pense que j'ai du mal comprendre comment c'est sensé marcher mais là je suis vraiment perdue...

    merci

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    dans ton objet db tu dois avoir un getPjs () qui te retourne un set tu peux donc faire un table.getPjs()

  3. #3
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    peux tu préciser l'erreur que tu obtiens pour qu'on puisse t'aider.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Alors voilà le début de l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: persist.Table.pjs, no session or session was closed
    	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
    	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
    	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
    	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    	at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:163)
    	at manager.TableManager.listeTables(TableManager.java:75)
    	at pretraitements.RecuperationDetailsTables.execute(RecuperationDetailsTables.java:25)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    La ligne qui pose problème est celle où est déclaré l'itérateur.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Comme le dit l'erreur, tu essaies de charger une collection, alors qu'il n'y a aucune session hibernate d'ouverte.

    Va voir : http://www.hibernate.org/hib_docs/v3...-fetching-lazy

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Ok j'irais voir (quand j'arriverais à aller sur le site d'hibernet, parce que aujourd'hui ça a pas l'air gagné).
    Merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/07/2014, 02h22
  2. Réponses: 4
    Dernier message: 18/02/2013, 21h23
  3. Relation Many to many porteuse de donnée
    Par doudou0088 dans le forum Hibernate
    Réponses: 13
    Dernier message: 15/11/2009, 13h57
  4. Réponses: 3
    Dernier message: 26/02/2007, 10h14
  5. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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