Bonjour,
Je suis débutant moi aussi avec Hibernate pour l'instant je n'ai pas eu trop de problème insurmontable à l'utiliser mais bon c'était trop beau.. la je bloque bien
Je vais essayer d'être compréhensible...
J'utilise Hibernate avec Spring et utilise des DAO issues d'HibernateTemplate.
Je voudrais sauvegardé dans ma base un objet qui contient des clefs etrangeres vers d'autres objet mais je cela ne marche pas et me produit une exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SQL Error: 1452, SQLState: 23000 Cannot add or update a child row: a foreign key constraint fails (`dial`.`message`, CONSTRAINT `FK_exp` FOREIGN KEY (`pseudo_exp`) REFERENCES `profile` (`pseudo`)) 31 mars 2008 00:25:46 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: "Servlet.service()" pour la servlet springapp a généré une exception com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`dial`.`message`, CONSTRAINT `FK_exp` FOREIGN KEY (`pseudo_exp`) REFERENCES `profile` (`pseudo`))
La structure des tables ma base est la suivante:
PROFILE
--------
pseudo
...
ou j'ai PRIMARY KEY (`pseudo`)
MESSAGE
---------
id
pseudo_exp
pseudo_dest
...
ou j'ai :
PRIMARY KEY (`id`),
KEY `FK_exp` (`pseudo_exp`),
KEY `FK_dest` (`pseudo_dest`),
CONSTRAINT `FK_dest` FOREIGN KEY (`pseudo_dest`) REFERENCES `profile` (`pseudo`),
CONSTRAINT `FK_exp` FOREIGN KEY (`pseudo_exp`) REFERENCES `profile` (`pseudo`)
Le mapping des associations dans le fichiers de mapping se fait comme ceci:
Dans le mapping de ma classe 'Profil' :
Dans le mapping de ma classe 'Message":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <set name="MsgSent" inverse="true"> <key column="pseudo_exp"/> <one-to-many class="Message"/> </set> <set name="MsgReceived" inverse="true"> <key column="pseudo_dest"/> <one-to-many class="Message"/> </set>
et voici le code que j'utilise pour enregistrer mon message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <many-to-one name="ProfilExp" column="pseudo_exp" class="Profil" not-null="true" /> <many-to-one name="ProfilDest" column="pseudo_dest" class="Profil" not-null="true" />
la methode "messageService.saveMessage(m)" fait juste un appel à la methode "messageDAO.saveMessage(m)"
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 Profil profilExp = profilService.getProfil(pseudoExp); Profil profilDest = profilService.getProfil(pseudoDest); Message m= new Message(); m.setProfilExp(profilExp); m.setProfilDest(profilDest); m.setMessage(message); m.setDtsend(dtSend); profilExp.addToMsgSent(m); profilDest.addToMsgReceived(m); messageService.saveMessage(m);
et la methode messageDAO.saveMessage(m) est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void saveMessage(Message m){ this.getHibernateTemplate().save(m); }
J'ai fais pas mal de test de differentes façons, j'ai lu pas mal de forum mais je n'ai pas trouvé mon bonheur, Google a pas été mon ami sur ce coup la...
Si quelqu'un pouvait me donner un coup de main, ce serait sympa
Merci d'avance..
Partager