IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Probleme pour enregistrer un objet avec des clefs étrangeres


Sujet :

Hibernate Java

  1. #1
    Invité
    Invité(e)
    Par défaut Probleme pour enregistrer un objet avec des clefs étrangeres
    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..

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 946
    Points : 4 368
    Points
    4 368
    Par défaut
    Citation Envoyé par escobiz Voir le message

    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..
    à première vue, il doit manquer les instructions de cascading…

    lors de la sauvegarde du message, le destinataire et l'expéditeur ne sont pas sauvegardés… donc ils n'ont pas encore de clé primaire attribuée…

    soit vous les sauvez manuellement AVANT le message, soit vous ajoutez des instructions de mapping disant à Hibernate comment il doit propager la sauvegarde
    (dans votre cas il faut au moins le cascade.persist)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.

    Mais l'expediteur et le destinataire était déjà créés dans ma base, les clefs que j'utilise sont du coup bien réélles

  4. #4
    Invité
    Invité(e)
    Par défaut
    la nuit portant conseil, j'ai pu résoudre mon problème...

    Mon enregistrement essayait de trouver les clefs étrangères sur une table "profile" alors que ma table s'appelle "profil" . j'avais il y a quelque jour renommé ma table grâce à mySQL Administrator mais biensur celui ci n'a pas fais la répercution de ce changement sur la déclaration des clefs étrangères de ma table "message".... merci MySQLAdministrator...

    Du coup aucun soucis avec hibernate, celui ci marche bien comme je l'avais prévu...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2014, 14h27
  2. probleme pour enregistrer des Q_ENUMS
    Par tendu1 dans le forum Qt
    Réponses: 2
    Dernier message: 10/03/2009, 19h44
  3. Réponses: 9
    Dernier message: 28/10/2005, 11h43
  4. [Oracle 10g]Problème pour enregistrer blob
    Par Invité dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2005, 11h45
  5. probleme de gestion de clients avec des sockets....
    Par ludvo dans le forum Réseau
    Réponses: 6
    Dernier message: 25/09/2003, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo