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 :

Mise à jour de l'id


Sujet :

Hibernate Java

  1. #1
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut Mise à jour de l'id
    Bonjour à tous,

    J'ai un petit souci en ce moment avec hibernate. J'utilise la version 3 lié à une base de données mysql 5.

    Le problème est que lorsque j'insère un objet en base de données son id n'est pas mis à jour. Or à ce que j'ai compris cela devrait se faire non? Voici mon code d'insertion:
    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
    Speaker j = new Speaker("Jacky");
    		Event e = new Event("Event 1", j);
    
    		Transaction tr = null;
    		Session session = null;
    		try {
    			session = getSessionFactory().openSession();
    			tr = session.beginTransaction();
    			//session.save(j);
    			session.saveOrUpdate(e);
    			session.flush();
    			tr.commit();
    			session.refresh(e);
    			log.debug("ID Event = "+ e.getId());
    			e = (Event)session.load(Event.class, e.getId());
    			log.info(e);
    		} catch (HibernateException ex) {
    			if (tr != null)
    				tr.rollback();
    			throw ex;
    		} finally {
    			if (session != null)
    				session.close();
    		}
    		factory.close();
    L'insertion se fait bien. Malheureusement lorsque je veux récupérer l'objet que je viens d'insérer (lignes en rouge) hibernate n'y arrive pas parce que l'id est à null. Comment faire?

    Mon id est généré grâce à une stratégie native. J'ai essayé avec identity sans succès.... Je ne pense pas que ca vienne de là.

    Merci d'avance pour votre aide.

    EDIT: A ce que j'ai pu constater, l'id est retourné par la méthode save (pas par la méthode saveOrUpdate) mais hibernate met normalement à jour de lui-même l'id dans l'objet persisté non?
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Tu as bien un getter et un setter sur ton ID ?

  3. #3
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Oui. Et je n'ai aucune erreur comme il n'arrive pas à mettre à jour l'id. Il le fait tout simplement pas.
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Dans ton mapping, generateur d'id doit etre de type assigné:
    <id name="attribuJava" type=" ">
    <column name="column " />
    <generator class="assigned"></generator>
    </id>

  5. #5
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Je n'ai vu à nul part dans la documentation qu'il faut faire ca. Pourrais-tu développer?

    EDIT:
    Commentaire pour la méthode save dans la javadoc:
    Persist the given transient instance, first assigning a generated identifier. (Or using the current value of the identifier property if the assigned generator is used.)
    ... Mais je me suis peut-être pas bien fait comprendre... Ce n'est pas là mon problème. Mon problème est qu'après mon save, l'id de mon objet java n'est pas mis à jour par hibernate. Or c'est le comportement expliqué dans le bouquin que je lis en ce moment à ce propos.
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  6. #6
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    Citation Envoyé par imad.elghazoini Voir le message
    Dans ton mapping, generateur d'id doit etre de type assigné:
    Je ne pense pas que ce soit le comportement voulu. Tu ne veux pas assigner toi meme l'id ?

  7. #7
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par JoloKossovar Voir le message
    Je ne pense pas que ce soit le comportement voulu. Tu ne veux pas assigner toi meme l'id ?
    Non comme j'ai essayé de l'expliquer c'est pas ce que je veux. Ce que j'attends d'hibernate (mais peut-être me trompe-je?) c'est que lorsque je persiste un nouvel objet il assigne automatiquement une nouvelle valeur à l'id de cet objet or je ne le constate pas.
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

Discussions similaires

  1. Comment empêcher la mise à jour d'un contrôle à l'écran ?
    Par JojoLaFripouille dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2003, 12h52
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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