Tout d'abord le contexte :
La base de données (2 tables):
La table Collaborateur a une colonne Fonction qui est une clé etrangere referencant une ligne de la table Fonction.
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 CREATE TABLE `fonction` ( `FN_ID` int(11) NOT NULL auto_increment, `FN_TITRE` varchar(20) NOT NULL, PRIMARY KEY (`FN_ID`) ); CREATE TABLE collaborateur ( `C_ID` int(11) NOT NULL auto_increment, `C_NOM` varchar(20) default NULL, `C_PRENOM` varchar(20) default NULL, `C_DATENAISSANCE` date default NULL, `C_MAIL` varchar(30) default NULL, `C_TELEPHONE` varchar(10) default NULL, `C_FONCTION` int(11) default NULL, `C_DATEMODIF` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`C_ID`), KEY `FK_collaborateur_fonction` (`C_FONCTION`), CONSTRAINT `collaborateur_ibfk_1` FOREIGN KEY (`C_FONCTION`) REFERENCES `fonction` (`FN_ID`) );
Mes fichiers de mapping :
Collaborateur.hbm.xml :
Fonction.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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="col.Collaborateur" table="collaborateur"> <id name="id" column="C_ID"> <generator class="increment"/> </id> <property name="nom" column="C_NOM" type="java.lang.String" length="20"/> <property name="prenom" column="C_PRENOM" type="java.lang.String" length="20"/> <property name="dateNaissance" column="C_DATENAISSANCE" type="timestamp"/> <property name="mail" column="C_MAIL" type="java.lang.String" length="30"/> <property name="telephone" column="C_TELEPHONE" type="java.lang.String" length="10"/> <many-to-one name="fonction" class="col.Fonction" column="C_FONCTION"/> </class> </hibernate-mapping>
et enfin les classes :
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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="col.Fonction" table="fonction"> <id name="id" column="FN_ID"> <generator class="increment"/> </id> <property name="titre" column="FN_TITRE" type="string" length="20"/> <set name="collaborateurs"> <key column="C_FONCTION"/> <one-to-many class="col.Collaborateur"/> </set> </class> </hibernate-mapping>
Collaborateur.java :
Fonction.java:
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
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
66
67
68
69
70
71
72
73
74
75 package col; import java.util.Date; public class Collaborateur { private int id; private int fonction; private String nom; private String prenom; private Date dateNaissance; private String mail; private String telephone; public Collaborateur() { } public int getFonction() { return fonction; } public void setFonction(int fonction){ this.fonction = fonction; } public int getId(){ return id; } public void setId(int id){ this.id = id; } public String getNom(){ return nom; } public void setNom(String nom){ this.nom = nom; } public String getPrenom(){ return prenom; } public void setPrenom(String prenom){ this.prenom = prenom; } public Date getDateNaissance(){ return dateNaissance; } public void setDateNaissance(Date dateNaissance){ this.dateNaissance = dateNaissance; } public String getMail(){ return mail; } public void setMail(String mail){ this.mail = mail; } public String getTelephone(){ return telephone; } public void setTelephone(String telephone){ this.telephone = telephone; } }
Voila, vous avez toutes les infos pour comprendre le probleme.
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
35
36
37
38
39 package col; import java.util.HashSet; import java.util.Set; public class Fonction { private int id; private String titre; private Set collaborateurs = new HashSet(); public Fonction() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitre() { return titre; } public void setTitre(String titre) { this.titre = titre; } public Set getCollaborateurs(){ return collaborateurs; } public void setCollaborateurs(Set collaborateurs) { this.collaborateurs = collaborateurs; } }
Quand je teste une insertion (avec SessionFactory et Session), la construction de la SessionFactory echoue en me donnant cette raison :
En clair, il me dit qu'il ne trouve pas de setter dans la classe Collaborateur pour la propriété fonction.
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
35
36
37 [java] Initial SessionFactory creation failed. [java] org.hibernate.PropertyNotFoundException: Could not find a setter for property fonction in class col.Collaborateur [java] Exception in thread "main" java.lang.ExceptionInInitializerError [java] at util.HibernateUtil.<clinit>(Unknown Source) [java] at col.CollaborateurManager.createAndStoreEvent(Unknown Source) [java] at col.CollaborateurManager.main(Unknown Source) [java] Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property fonction in class col.Collaborateur [java] at org.hibernate.property.BasicPropertyAccessor.createSetter(Bas icPropertyAccessor.java:216) [java] at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicP ropertyAccessor.java:209) [java] at org.hibernate.mapping.Property.getSetter(Property.java:265) [java] at org.hibernate.tuple.PojoEntityTuplizer.buildPropertySetter(Po joEntityTuplizer.java:259) [java] at org.hibernate.tuple.AbstractEntityTuplizer.<init>(AbstractEnt ityTuplizer.java:122) [java] at org.hibernate.tuple.PojoEntityTuplizer.<init>(PojoEntityTupli zer.java:55) [java] at org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java :64) [java] at org.hibernate.tuple.EntityMetamodel.<init>(EntityMetamodel.ja va:257) [java] at org.hibernate.persister.entity.AbstractEntityPersister.<init> (AbstractEntityPersister.java:412) [java] at org.hibernate.persister.entity.SingleTableEntityPersister.<in it>(SingleTableEntityPersister.java:108) [java] at org.hibernate.persister.PersisterFactory.createClassPersister (PersisterFactory.java:55) [java] at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryIm pl.java:216) [java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configura tion.java:1176) [java] ... 3 more [java] Java Result: 1
Or elle y est et me semble bien ecrite...
Ca fait une 1/2 journée que je suis la dessus, et je commence à devenir chevre... je vous precise que c'est la premiere fois que j'utilise Hibernate et cela explique mon manque d experience sur ce genre d'erreurs...
je pense que beaucoup ici ont de l experience et cela doit leur sembler plus evident à corriger... je vous demande alors de l'aide! au secours!
Partager