-->
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.  [ 1 post ] 
Author Message
 Post subject: Problème de clés étrangères
PostPosted: Thu Aug 16, 2012 5:42 am 
Newbie

Joined: Thu Aug 16, 2012 5:33 am
Posts: 2
Bonjour, je suis en train de devenir fou car j'ai un problème incompréhensible avec des contraintes de clés étrangères, même problème que ce soit avec Mysql ou SQL Server. J'ai une table employe_metier qui contient un champ employe_id lié au champ id de la table employe, et un autre champ metier_id lié au champ id de la table metier. Voici les fichiers de mapping correspondants :

metier.hbm.xml :

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 16 ao?t 2012 11:30:52 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.menehould.interventions.bean.Metier" table="metier" schema="dbo" catalog="interventions">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="libelle" type="string">
            <column name="libelle" />
        </property>
        <set name="employes" inverse="false" table="employe_metier">
            <key>
                <column name="id_metier" not-null="true" />
            </key>
            <many-to-many entity-name="com.menehould.interventions.bean.Employe">
                <column name="id_employe" not-null="true" />
            </many-to-many>
        </set>
    </class>
</hibernate-mapping>


employe.hbm.xml :

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 16 ao?t 2012 11:30:52 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.menehould.interventions.bean.Employe" table="employe" schema="dbo" catalog="interventions">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="nom" type="string">
            <column name="nom" length="20" />
        </property>
        <property name="prenom" type="string">
            <column name="prenom" length="20" />
        </property>
        <set name="metiers" inverse="false" table="employe_metier">
            <key>
                <column name="id_employe" not-null="true" />
            </key>
            <many-to-many entity-name="com.menehould.interventions.bean.Metier">
                <column name="id_metier" not-null="true" />
            </many-to-many>
        </set>
    </class>
</hibernate-mapping>


Lorsque je mets à jour l'intitulé d'un métier, par le biais d'un formulaire, hibernate exécute une requête pour supprimer l'enregistrement correspondant dans la table employe_metier :

Quote:
INFO: Hibernate:
select
metier_.id,
metier_.libelle as libelle2_
from
interventions.dbo.metier metier_
where
metier_.id=?
INFO: Hibernate:
update
interventions.dbo.metier
set
libelle=?
where
id=?
INFO: Hibernate:
delete
from
employe_metier
where
id_metier=?

INFO: Hibernate:
select
metier0_.id as id2_,
metier0_.libelle as libelle2_
from
interventions.dbo.metier metier0_
order by
metier0_.libelle


Voici la méthode correspondante : (struts 2)

Code:
public String saveOrUpdate()
    {
        try
        {
            Session session = HibernateUtil.getSession();       
            session.saveOrUpdate(metier);
            Transaction tx = session.beginTransaction();
           
            try
            {           
                tx.commit();
            }
           
            catch(HibernateException e)
            {
                addActionError(e.getMessage());
                tx.rollback();
            }
        }
       
        catch(HibernateException e)
        {
            addActionError(e.getMessage());
        }
       
        catch(Exception e)
        {
            addActionError(e.getMessage());
        }
       
        if(hasFieldErrors())
        {
            return ERROR;
        }
       
        return SUCCESS;
       
    }


Vraiment rien de compliqué, mais pourquoi la requête "delete" ? Je ne comprends pas d'où elle vient, pourquoi elle est générée et ça me rend vraiment dingue. J'ai tout essayé au niveau de la bdd : du "no action" et du "cascade" en update sur les clés étrangères, désactivation des contraintes etc... mais rien ne change. Merci par avance pour votre aide.


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

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.