These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: pb avec les collections
PostPosted: Tue Jan 01, 2008 12:34 pm 
Newbie

Joined: Mon Dec 31, 2007 10:56 am
Posts: 2
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;
}


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 02, 2008 5:51 am 
Newbie

Joined: Mon Dec 31, 2007 10:56 am
Posts: 2
Bonjour à tous.

J'ai réussi à faire marcher mes set correctement pour du many-to-many.

J'ai changé le mapping xml des set généré par les hibernate tools, par celui de la doc de démarrage rapide, et ils marchent.

Il me trouve bien un changement d'état entre le load (qui me renvoit un set correctement rempli) et après avoir fait un clear ou add par exemple.

Par contre j'ai toujours le même problème sur des one-to-many ou des many-to-one. Je pense que c'est juste un soucis au niveau du mapping xml, donc même si vous n'avez pas d'idée sur le pourquoi du problème mais que vous avez des one-to-many ou des many-to-one qui fonctionnent, pourriez vous me coller votre mapping xml svp ?

Cordialement,

Matthieu


Top
 Profile  
 
 Post subject: table d'union
PostPosted: Thu Jan 03, 2008 5:10 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
Matthieu:

Je croit que le problème consiste en ajouter le mot "inverse" dans tes définitions de sets.
Autant que je sache, "inverse" veut dire: "ne faites aucun SQL concernant cette association, car on s'occupe de ça à quelque autre place".
Je ne mettrai le mot "inverse" du tout dans la définition de tes sets, mais seulement dans des rélations one-to-many bidirectionnales.

_________________
Gonzalo Díaz


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.