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' :
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>
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
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"
/>
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
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);
la methode "messageService.saveMessage(m)" fait juste un appel à la methode "messageDAO.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..