Bonjour à tous.
J'ai un probleme avec un simple many-to-many et bien que j'ai suivi les docs à la lettre, il ne me fait pas mes insert/updates.
Alors voici ma situation :
une table carnet, une table sejour et une table de liaison carnet_sejours. Ma base est une classique MySQL, toutes mes tables sont en innoDB.
j'utilise les hibernate tools d'eclipse pour tout me generer (xml + pojo).
Je manipule sans probleme mes carnets et mes sejours mais quand je fais un ajout de sejour dans un carnet, il ne me met rien dans ma table d'association carnet_sejours.
je n'ai pas d'insertion dans la table carnet_sejours, et pourtant c'est exactement la meme chose que dans la documentation d'exemple avec les Events et les Persons.
Les id que j'envoi à ma fonction d'ajout sont valide, je les ai testes, j'ai juste l'impression qu'il ne detecte pas qu'il y a eu un changement dans le set, et je me demande donc si il est persisté. J'ai essayé de forcer l'insertion avec un session.saveOrUpdate(carnet) mais aucune difference.
Merci de votre aide. Vous trouverez tout ce qui doit etre necessaire ci dessous.
Matthieu
public void addSejourToCarnet(Integer sejourId, Integer carnetId)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Carnet carnet = (Carnet) session.load(Carnet.class, carnetId);
Sejour sejour = (Sejour) session.load(Sejour.class, sejourId);
carnet.getSejours().add(sejour);
session.getTransaction().commit();
}
le show_sql me donne ca :
Hibernate: select carnet0_.ID as ID0_0_, carnet0_.TITLE as TITLE0_0_, carnet0_.DESCRIPTION as DESCRIPT3_0_0_, carnet0_.CREATED as CREATED0_0_, carnet0_.UPDATED as UPDATED0_0_ from lab.carnet carnet0_ where carnet0_.ID=?
Hibernate: select sejours0_.CARNET_ID as CARNET1_1_, sejours0_.SEJOUR_ID as SEJOUR2_1_, sejour1_.ID as ID16_0_, sejour1_.TITLE as TITLE16_0_, sejour1_.DESCRIPTION as DESCRIPT3_16_0_, sejour1_.CREATED as CREATED16_0_, sejour1_.UPDATED as UPDATED16_0_ from carnet_sejours sejours0_ left outer join lab.sejour sejour1_ on sejours0_.SEJOUR_ID=sejour1_.ID where sejours0_.CARNET_ID=?
voici mes set dans les mappings xml :
carnet.hbm.xml :
<set name="sejours" inverse="true" table="carnet_sejours">
<key>
<column name="CARNET_ID" not-null="true">
<comment></comment>
</column>
</key>
<many-to-many entity-name="roadbook.bdd.mappings.Sejour">
<column name="SEJOUR_ID" not-null="true">
<comment></comment>
</column>
</many-to-many>
</set>
sejour.hbm.xml :
<set name="carnets" inverse="true" table="carnet_sejours">
<key>
<column name="SEJOUR_ID" not-null="true">
<comment></comment>
</column>
</key>
<many-to-many entity-name="roadbook.bdd.mappings.Carnet">
<column name="CARNET_ID" not-null="true">
<comment></comment>
</column>
</many-to-many>
</set>
et les sets dans mes pojos :
carnet.java :
private Set<Sejour> sejours = new HashSet<Sejour>(0);
public Set<Sejour> getSejours() {
return this.sejours;
}
public void setSejours(Set<Sejour> sejours) {
this.sejours = sejours;
}
sejour.java :
private Set<Carnet> carnets = new HashSet<Carnet>(0);
public Set<Carnet> getCarnets() {
return this.carnets;
}
public void setCarnets(Set<Carnet> carnets) {
this.carnets = carnets;
}
|