Une jointure n-n ne marche pas (hibernate)
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 :
Code:
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 + "]";
} |
J'ai une classe Livre :
Code:
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 + "]";
} |
Mon Auteur.hbm.xml :
Code:
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> |
et Livres.hbm.xml est le suivant :
Code:
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> |
ma classe de test :
Code:
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); |
la fonction enregistrerAuteur (Auteur aut) est la suivante :
Code:
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();
}
}
} |
Dans la table de jointure AUTEUR_LIVRE il n'y a pas de lignes.
Je vous remercie par avance :