Bonjour,
Quand je tente un session.save(personne); pour une seule Personne, j'ai ce message d'erreur:
J'ai bien vérifié ce que je faisais dans la doc mais ça ne suffit pas donc j'ai pu rater certains concepts.Foreign key (FK_g4uaceies78lhtnyyl79k3pjm:CV [ID])) must have same number of columns as the referenced primary key (PERSONNE [ID,idx])
Voici la classe Personne:
et son 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 public class Personne { Integer id; String nom; String prenom; Integer codePostal; String adresse; String ville; String naissance; String mail; String telephone; ArrayList<CV> cvs; ArrayList<String> permis; Integer role; String login; String motDePasse; Double longitude; Double latitude;
Comme vous pouvez le voir elle a pour attribut un ArrayList de CV avec une mapping one (la personne) to many (les cvs).
Code xml : 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 <?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 Dec 4, 2014 10:28:55 AM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="fr.itescia.cevetek.administration.Personne" table="PERSONNE"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="nom" type="java.lang.String"> <column name="NOM" /> </property> <property name="prenom" type="java.lang.String"> <column name="PRENOM" /> </property> <property name="codePostal" type="java.lang.Integer"> <column name="CODEPOSTAL" /> </property> <property name="adresse" type="java.lang.String"> <column name="ADRESSE" /> </property> <property name="ville" type="java.lang.String"> <column name="VILLE" /> </property> <property name="naissance" type="java.lang.String"> <column name="NAISSANCE" /> </property> <property name="mail" type="java.lang.String"> <column name="MAIL" /> </property> <property name="telephone" type="java.lang.String"> <column name="TELEPHONE" /> </property> <list name="cvs" inverse="false" table="CV" lazy="true"> <key> <column name="ID" /> </key> <list-index> <column name="idx" /> </list-index> <one-to-many class="fr.itescia.cevetek.exportation.CV" /> </list> <list name="permis" inverse="false" table="PERSONNE" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <element type="java.lang.String"> <column name="PERMIS" /> </element> </list> <property name="role" type="java.lang.Integer"> <column name="ROLE" /> </property> <property name="login" type="java.lang.String"> <column name="LOGIN" /> </property> <property name="motDePasse" type="java.lang.String"> <column name="MOTDEPASSE" /> </property> <property name="latitude" type="org.hibernatespatial.GeometryUserType" column="latitude"/> <property name="longitude" type="org.hibernatespatial.GeometryUserType" column="longitude"/> </class> </hibernate-mapping>
La classe CV ressemble à ça:
et son hbm.xml à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class CV { Integer id; ArrayList<Formation> formations; ArrayList<Experience> experiences; ArrayList<Competence> competences; ArrayList<Langue> langues; ArrayList<Loisir> loisirs; Date dateModif; Date dureeSupp;
Donc, de ce que je comprends du message d'erreur, Hibernate voit la clé primaire de personne comme une clé composite, alors que ça n'est défini nulle part. Et de l'autre coté, il voit la clé étrangère de CV comme une clé simple, alors qu'elle devrait avoir son index aussi, vu que c'est une liste.
Code xml : 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 <?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 Dec 4, 2014 10:28:55 AM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="fr.itescia.cevetek.exportation.CV" table="CV"> <id name="id" type="java.lang.Integer"> <column name="ID_CV" /> <generator class="native" /> </id> <list name="formations" inverse="false" table="FORMATION" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <one-to-many class="fr.itescia.cevetek.profil.Formation" /> </list> <list name="experiences" inverse="false" table="EXPERIENCE" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <one-to-many class="fr.itescia.cevetek.profil.Experience" /> </list> <list name="competences" inverse="false" table="COMPETENCE" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <one-to-many class="fr.itescia.cevetek.profil.Competence" /> </list> <list name="langues" inverse="false" table="LANGUE" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <one-to-many class="fr.itescia.cevetek.profil.Langue" /> </list> <list name="loisirs" inverse="false" table="LOISIR" lazy="true"> <key> <column name="ID" /> </key> <list-index></list-index> <one-to-many class="fr.itescia.cevetek.profil.Loisir" /> </list> <property name="dateModif" type="java.sql.Date"> <column name="DATEMODIF" /> </property> <property name="dureeSupp" type="java.sql.Date"> <column name="DUREESUPP" /> </property> </class> </hibernate-mapping>
Du coup, j'ai du mal à comprendre ce que j'ai raté, ça devrait être un many-to-one le mapping en fait ?
Où est-ce que je devrais mettre une clé composite sur CV au lieu qu'Hibernate le gère lui même pour les index ?
Merci d'avance pour votre aide.
Partager