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 :

Hibernate: many-to-many, collections SET vides


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut Hibernate: many-to-many, collections SET vides
    bonjour tt le monde,

    j'ai un gros problème avec hibernate depuis qqs jours. je fais un petit exo pour comprendre le fonctionnement d'hibernate et j'ai 2 type d'objets: voiture et conducteur, j'ai une base de données mysql avec troi tables: voiture, conducteur et conducteur_voiture (qui relie les deux, elle ne possède que les deux clés primaires des deux tables). entre les classes voiture et conducteur il y a une relation many-to-many bi-directionnelle et tout marche bien quand je récupère tous les conducteurs ou toutes les voitures de ma base de données. il y a un SET pour les voitures et un SET pour les conducteurs qui normalement possède les conducteurs de la voiture (pour les voitures) et les voitures conduite par le conducteur (pour les conducteurs).

    mon problème est que ce SET est toujours vide, quand je récupère une voiture et j'ai envie d'afficher la liste des conducteurs, j'obtiens une liste vide. la base de données est bien remplie (il y a bien des voitures atribuées à des conducteurs...) et jboss n'affiche aucun problème. il affiche même les requêtes générées mais apparemment elles ne donnent aucun résultat.

    des idées?

    mapping des conducteurs:
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.company.Conducteur" table="conducteur">
    		<id name="conducteurId" column="conducteurId" type="int" unsaved-value="null">
    			<generator class="native"/>
    		</id>
    		<property name="nom" type="string">
    			<column name="nom" length="50"/>
    		</property>
            <set name="voitures" table="conducteur_voiture" inverse="true" cascade="all" lazy="false">
                <key column="conducteurId" not-null="true"/>
                <many-to-many column="voitureId" class="com.company.Voiture"/>
            </set>
    	</class>
    </hibernate-mapping>
    mapping des voitures

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.company.Voiture" table="voiture">
    		<id name="voitureId" column="voitureId" type="int" unsaved-value="null">
    			<generator class="native"/>
    		</id>
    		<property name="marque" type="string">
    			<column name="marque" length="50"/>
    		</property>
    		<property name="modele" type="string">
    			<column name="modele" length="50"/>
    		</property>
    		<property name="immatriculation" type="string">
    			<column name="immatriculation" length="50"/>
    		</property>
    		<property name="dateSortie">
    			<column name="datesortie"/>
    		</property>
            <set name="conducteurs" table="conducteur_voiture" cascade="all" lazy="false">
                <key column="voitureId" not-null="true"/>
                <many-to-many column="conducteurId" class="com.company.Conducteur"/>
            </set>
    	</class>
    </hibernate-mapping>
    conducteur.java:
    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
    public class Conducteur implements Serializable {
    	private String nom;
    	private int conducteurId=-1;
     
    	public int getConducteurId() {
    		return conducteurId;
    	}
    	public void setConducteurId(int conducteurId) {
    		this.conducteurId = conducteurId;
    	}
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	private Set voitures=new HashSet();
     
    	public Set getVoitures() {
    		return voitures;
    	}
    	public void setVoitures(Set voitures) {
    		this.voitures = voitures;
    	}
     
    	public String toString(){
    		return "Nom: "+getNom();
    	}
     
    }
    voiture.java:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class Voiture implements Serializable{
    	private int voitureId=-1;
    	private String marque;
    	private String modele;
    	private String immatriculation;
    	private String dateSortie;
     
    	public String getDateSortie() {
    		return dateSortie;
    	}
    	public String getImmatriculation() {
    		return immatriculation;
    	}
    	public String getMarque() {
    		return marque;
    	}
    	public String getModele() {
    		return modele;
    	}
    	public void setDateSortie(String date_sortie) {
    		this.dateSortie = date_sortie;
    	}
    	public void setImmatriculation(String immatriculation) {
    		this.immatriculation = immatriculation;
    	}
    	public void setMarque(String marque) {
    		this.marque = marque;
    	}
    	public void setModele(String modele) {
    		this.modele = modele;
    	}
     
    	private Set conducteurs=new HashSet();
     
    	public String toString(){
    		return "Marque: "+getMarque()+"\n<br>Modèle: "+getModele()+"\n<br>Immatriculation: "+getImmatriculation()+"\n<br>Date de sortie: "+getDateSortie().toString()+"<br>------------<br>";
     
    	}
    	public Set getConducteurs() {
    		return conducteurs;
    	}
    	public void setConducteurs(Set conducteurs) {
    		this.conducteurs = conducteurs;
    	}
    	public void setVoitureId(int voitureId) {
    		this.voitureId = voitureId;
    	}
    	public int getVoitureId() {
    		return voitureId;
    	}
    }
    exemple code d'affichage:

    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
     
    		Session session = HibernateUtil.currentSession();
    		Transaction transac=session.beginTransaction();
     
    		List voitures = new ArrayList<Voiture>();
    		voitures=session.createQuery("from Voiture").list();
    		transac.commit();
    		if (voitures != null) {
    			Iterator it = voitures.iterator();
     
    			Voiture voiture;
    			try {
    				while (it.hasNext()) {
    					voiture = (Voiture) it.next();
    					out.println(voiture.toString()+"Conducteurs: "+voiture.getConducteurs().size()+"<br><br>");
    				}
    			} catch (final IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    Exemple d'affichage:

    Marque: renault
    Modèle: espace
    Immatriculation: SFSFSDZE
    Date de sortie: 2007-02-07
    ------------
    Conducteurs: 0

    il y a 2 conducteurs mais ça affiche toujours 0

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut solution...
    en fait ct un problème de la base de données, j'avais la version 4.X, je l'ai upgradé à la version 5 et maintenant ça marche nickel.

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

Discussions similaires

  1. one-to-many et set vide
    Par Bluepioupiou dans le forum Hibernate
    Réponses: 4
    Dernier message: 08/11/2010, 10h01
  2. Hibernate Relations Reflexives Many-to-Many
    Par Shiingo dans le forum Hibernate
    Réponses: 6
    Dernier message: 14/09/2007, 15h57
  3. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  4. [hibernate 3] mapping many-to-many
    Par darkyspirit dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/12/2006, 19h37
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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