Bonjour, j'ai un problème avec l'update de tables relationnelles. j'ai le schéma suivant dans Mysql 5 :
Le code Hibernate généré par Netbeans 7.1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CREATE TABLE IF NOT EXISTS `employe` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nom` varchar(20) DEFAULT NULL, `prenom` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; CREATE TABLE IF NOT EXISTS `employe_metier` ( `id_employe` int(11) NOT NULL, `id_metier` int(11) NOT NULL, PRIMARY KEY (`id_employe`,`id_metier`), KEY `id_employe` (`id_employe`), KEY `id_metier` (`id_metier`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `metier` ( `id` int(11) NOT NULL AUTO_INCREMENT, `libelle` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; ALTER TABLE `employe_metier` ADD CONSTRAINT `employe_metier_ibfk_1` FOREIGN KEY (`id_employe`) REFERENCES `employe` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `employe_metier_ibfk_2` FOREIGN KEY (`id_metier`) REFERENCES `metier` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE;
hibernate.reveng.xml
employe.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd"> <hibernate-reverse-engineering> <schema-selection match-catalog="interventions"/> <table-filter match-name="employe_metier"/> <table-filter match-name="employe"/> <table-filter match-name="typetravaux"/> <table-filter match-name="intervention"/> <table-filter match-name="intervention_employe"/> <table-filter match-name="metier"/> </hibernate-reverse-engineering>
metier.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?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 26 juin 2012 13:58:33 by Hibernate Tools 3.2.1.GA --> <hibernate-mapping> <class name="com.menehould.interventions.bean.Employe" table="employe" catalog="interventions"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </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="interventions" inverse="false" table="intervention_employe"> <key> <column name="id_employe" not-null="true" /> </key> <many-to-many entity-name="com.menehould.interventions.bean.Intervention"> <column name="id_intervention" not-null="true" /> </many-to-many> </set> <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>
J'explique le problème : quand je mets à jour l'intitulé d'un métier, il disparaît de la relation employé / métier : l'enregistrement disparaît de la table employe_metier. J'ai vérifié après la mise à jour de l'intitulé du métier, il garde pourtant le même id. Pourquoi l'enregistrement disparaît de la table relationnelle ? Je n'arrive pas à comprendre, un problème dans mon mapping ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <?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 26 juin 2012 13:58:33 by Hibernate Tools 3.2.1.GA --> <hibernate-mapping> <class name="com.menehould.interventions.bean.Metier" table="metier" catalog="interventions"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </id> <property name="libelle" type="string"> <column name="libelle" /> </property> <set name="interventions" inverse="true"> <key> <column name="metier" not-null="true" /> </key> <one-to-many class="com.menehould.interventions.bean.Intervention" /> </set> <set name="employes" inverse="false" cascade="save-update" 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>
Partager