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:
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 <?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>
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 <?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>
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 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(); } }
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
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 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(); } }
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![]()
Partager