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 :

NonUniqueObjectException : doublon dans la session ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut NonUniqueObjectException : doublon dans la session ?
    Bonjour,

    Je suis plutôt un débutant dans Hibernate et j'ai l'exception suivante net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 4463, of class: ccomptes.sami.referentiel.metier.bean.Organisme quand j'enregistre mon objet

    D'après ce qu'on m'a dit c'est que j'ai chargé deux fois le même objet en session et du coup à l'enregistrement Hibernate ne s'y retrouve plus. Pouvez-vous confirmer le diagnostique ?

    Si c'est bien ça, comme savoir si un objet est déjà chargé en session ? J'ai essayé le méthde contains() mais ça ne marche qu'avec une instance de l'objet et je n'ai que son id.

    Merci d'avance pour vos éclaircissement

    Sylvain

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Effectivement, la raison que je connais est bien celle que tu décris, c'est à dire tu as deux objets ayant le même identifiant dans la session.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Entity entity = (Entity) s.get(id);
    Entity newEntity = new Entity(id);
    s.save(newEntity); // Plantage assuré
    Si ton objet est déjà la session et que tu veux le modifier, il te suffirait de le garder, de faire les modifications et de faire un update.

    Si tu veux vraiment créer un nouvel objet alors tu faire un evict sur l'ancien pour l'enlever de la session.

    Si tu as uniquement l'id, il serait peut être possible de faire un load et de faire un contains mais c'est vraiment pas terrible.

    Je te conseils plutôt de réfléchir au fait que tu es deux fois le même objet dans la session manipulé à deux endroits différents.

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 34
    Par défaut
    Merci d'avoir confirmé le problème.

    Je vais stocker mes objets dans une liste et vérifier avant le load s'il existe.

    Sylvain

Discussions similaires

  1. [access]doublons dans une table en access !
    Par hackerandco dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2004, 14h45
  2. [CR] doublon dans les valeurs
    Par Gaëtane dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/06/2004, 15h25
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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