Bonjour à tous,
J'utilise Hibernate 3 et je développe une appli de gestions d'utilisateurs. Un utilisateur peut s'enregistrer sur plusieurs sites. J'ai donc trois tables : USER, SITE et USER_SITE.
Je rencontre un problème lorsque je veux supprimer un user : au lieu de supprimer les lignes concernées par le user dans ma table USER_SITES, hibernate fait un update en essayant de mettre le USER à null, ce qui génère une erreur puisque un user ne peut pas être null dans ma table USER_SITES.
Je pense que j'ai mal fait mon mapping ou qu'il faut que je m'y prenne autrement mais je ne trouve pas de solutions ...
Voici mon mapping :
USER
Code:
<hibernate-mapping>
<class name="User" table="users">
<id name="id" type="integer">
<generator class="increment"/>
</id>
<property name="title">
<column name="title"/>
</property>
<property name="lastname">
<column name="last_name"/>
</property>
<property name="firstname">
<column name="first_name"/>
</property>
<set name="userSites" cascade="all-delete-orphan">
<key column="user"/>
<one-to-many class="UserSite"/>
</set>
</class>
</hibernate-mapping>
SITE
Code:
<hibernate-mapping>
<class name="Site" table="sites">
<id name="id" type="integer">
<generator class="increment"/>
</id>
<property name="name">
<column name="name"/>
</property>
<set name="siteUsers">
<key column="site"/>
<one-to-many class="UserSite"/>
</set>
</class>
</hibernate-mapping>
USER_SITE
Code:
<hibernate-mapping>
<class name="UserSite" table="user_site">
<id name="id" type="int">
<generator class="increment"/>
</id>
<property name="validated">
<column name="validated"/>
</property>
<many-to-one name="site" class="Site">
<column name="site" sql-type="number"/>
</many-to-one>
<many-to-one name="user" class="User">
<column name="user"/>
</many-to-one>
</class>
</hibernate-mapping>
Voici le code de l'action de mon DAO qui supprime un user:
Code:
public void removeUser(final Integer id) {
try {
getHibernateTemplate().delete(getUser(id));
}
catch( Exception e ) {
log.error("removeUser: ", e);
}
}
Et la requête générée par Hibernate:
Code:
Hibernate: select this_.id as id5_0_, this_.last_name as last3_5_0_, , this_.first_name as first5_5_0_ from users this_ where this_.id=?
Hibernate: select user0_.user as user5_1_, user0_.id as id1_, user0_.id as id6_0_, user0_.validated as validated6_0_, user0_.site as site6_0_, user0_.user as user5_6_0_ from user_site user0_ where user0_.user=?
Hibernate: update user_site set user=null where user=?
Voilà, si quelqu'un a une idée ou des conseils pour améliorer tout ça, je suis preneuse :)
Merci