Bonjour,
Je n'arrive pas à faire marcher un exemple tout simple avec hibernate.
J'ai remarqué que les tables sont mises à jour mais pas la table de jointure.
Je poste mon petit code :
J'ai une classe Auteur :
J'ai une classe Livre :
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 private Long auteurId; private String nom; private String prenom; private Set<Livre> livres = new HashSet<Livre>(); public Auteur() { } public Long getAuteurId() { return auteurId; } public void setAuteurId(Long auteurId) { this.auteurId = auteurId; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Set<Livre> getLivres() { return livres; } public void setLivres(Set<Livre> livres) { this.livres = livres; } @Override public String toString() { return "Auteur [auteurId=" + auteurId + ", nom=" + nom + ", prenom=" + prenom + "]"; }
Mon Auteur.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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class Livre { private Long livreId; private String titre; private Set<Auteur> auteurs = new HashSet<Auteur>(); public Livre() { } public Long getLivreId() { return livreId; } public void setLivreId(Long livreId) { this.livreId = livreId; } public String getTitre() { return titre; } public void setTitre(String titre) { this.titre = titre; } public Set<Auteur> getAuteurs() { return auteurs; } public void setAuteurs(Set<Auteur> auteurs) { this.auteurs = auteurs; } @Override public String toString() { return "Livre [titre=" + titre + ", auteurs=" + auteurs + "]"; }
et Livres.hbm.xml est le suivant :
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 <hibernate-mapping> <class name="model.Auteur" table="AUTEUR"> <id name="auteurId" column="AUTEUR_ID"> <generator class="increment" /> </id> <property name="nom" column="NOM" /> <property name="prenom" column="PRENOM" /> <set name="livres" table="AUTEUR_LIVRE" inverse="true" lazy="false" cascade="all"> <key column="AUTEUR_ID"></key> <many-to-many column="LIVRE_ID" class="model.Livre" ></many-to-many> </set> </class> </hibernate-mapping>
ma classe de test :
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 <hibernate-mapping> <class name="model.Livre" table="LIVRE"> <id name="livreId" column="LIVRE_ID"> <generator class="increment" /> </id> <property name="titre" column="TITRE" /> <set name="auteurs" table="AUTEUR_LIVRE" lazy="false" cascade="all"> <key column="LIVRE_ID" not-null="true" ></key> <many-to-many class="model.Auteur"> <column name="AUTEUR_ID" not-null="true"/> </many-to-many> </set> </class> </hibernate-mapping>
la fonction enregistrerAuteur (Auteur aut) est la suivante :
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 public void test() { Set<Livre> livres = new HashSet<Livre>(); Auteur aut = new Auteur(); aut.setPrenom("Victor"); aut.setNom("Hugo"); Livre liv1 = new Livre(); liv1.setTitre("Le magnifique 1"); Livre liv2 = new Livre(); liv2.setTitre("Le magnifique 2"); livres.add(liv1); livres.add(liv2); aut.setLivres(livres); dao.enregistrerAuteur(aut);
Dans la table de jointure AUTEUR_LIVRE il n'y a pas de lignes.
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 public void enregistrerAuteur(Auteur auteur) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.getTransaction(); try { tx.begin(); session.save(auteur); tx.commit(); } catch (HibernateException e) { tx.rollback(); System.out.println(e.getMessage()); } finally { if (session != null) { session.close(); } } }
Je vous remercie par avance :
Partager