Merci pour ta réponse,
au niveau de la relation contacts adresses j'ai une relation many-to-many standard. La mise a jour de la table contacts_adresses se fait correctement.
En regardant ce post
http://www.theserverside.com/discussion ... d_id=31850
je suis arrivé à avancer quelque peu. En fait je faisait un save de AdsContacts avant d'avoir fait le save de Ads, ce qui posait un problème vu que l'ad_id n'était pas encore affecté.
Le problème c'est que maintenant, je n'ai plus aucune erreur, l'objet Ad parait complet quand on le regarde dans le debugger, avec sa liste de AdsContacts remplis, qui pointent bien sur le contact, sur l'adress_id et sur l'Ads mais la table ads_contact est totalement ignorée. Il n'y a pas d'insert qui se fait.
Pour rappel :
Adresses.hbm.xml
Code:
<class name="Addresses" table="addresses">
<id name="AddressId" type="java.lang.Integer">
<column name="address_id" length="11" not-null="true" unique="true" sql-type="int" />
<generator class="native" />
</id>
<property
name="AddressLine1"
type="java.lang.String"
>
<column name="address_line_1" not-null="true" sql-type="varchar" />
</property>
...
Ads.hbm.xml
Code:
</class>
<class name="Ads" table="ads">
<id name="AdId" type="java.lang.Integer">
<column name="ad_id" length="11" not-null="true" unique="true" sql-type="int" />
<generator class="native" />
</id>
<bag name="AdsContacts" inverse="true">
<key column="ad_id"/>
<one-to-many class="AdsContacts"/>
</bag>
...
</class>
AdsContacts.hbm.xml
Code:
<class name="AdsContacts" table="ads_contacts">
<composite-id name="id"
class="AdsContactsId"
>
<key-many-to-one name="Ads" class="Ads">
<column name="ad_id" length="11" not-null="false" />
</key-many-to-one>
<key-many-to-one name="Contacts" class="Contacts">
<column name="contact_id" length="11" not-null="false" />
</key-many-to-one>
</composite-id>
<property name="AddressId" type="java.lang.Integer">
<column name="address_id" length="11" not-null="true" sql-type="int unsigned" />
</property>
</class>
AdsMgr.java
Code:
Ads myAd = new Ads();
AdsContacts myAdsContact = new AdsContacts();
Contacts contact = new Contact();
contact.setName("toto");
session.save(contact);
myAdsContact.getId().setContacts(contact);
myAdsContact.getId().setAds(myAd);
myAdsContact.setAddressId(contact.getAddresses().get(0).getAddressId());
session.save(myAd);
J'ai bien les tables Ads , Contacts, Addresses et Contacts_Addresses remplies, mais Ads_Contacts reste désespérément vide.
J'ai aussi tenté un session.save() de chaque AdsContacts après le save de myAd mais ca ne change rien. Je ne vois jamais passé de sql dans le log avec un insert dans ads_contacts.
Vous voyez un autre moyen ?