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 :

"a different object with the same identifier value.." prob de cache?


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut "a different object with the same identifier value.." prob de cache?
    Bonjour tout le monde!

    Je débute avec hibernate, et j'ai l'impression d'avoir un problème de cache.

    Lors d'un saveOrUpdate, l'exception suivante est levée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
    Le problème survient après avoir fait un load d'un bean A, qui sera une donnée membre d'un bean B, puis je fais un saveOrUpdate du bean B (la dépendance etant en théorie bien mappée).

    J'ai beau faire des clear, flush et close sur la session hibernate entre les opérations, il semble que le bean A reste en cache pour une raison que j'ignore. Mettre un CacheMode.IGNORE ne change rien.

    Je n'ai surement pas saisi les tenants et aboutissants d'hibernate me diriez vous, mais en attendant, je suis bien coincé et je n'ai pas vraiment le temps de me plonger en profondeur la dedans...

    Des indices? Erreur courante?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 116
    Par défaut
    Salut,
    A-tu implementé la methode equals et hashcode pour tes objects persitant ?
    Si tu ne l'a pas fait je t'invite a lire la doc.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut
    Oui en effet, ca doit provenir de la.
    En attendant, j'ai réussi à contourner le problème en me débrouillant pour qu'hibernate ne charge pas plusieurs fois le meme objet.

    Pour l'histoire, les objets A et B faisaient tout deux références au meme objet, d'où l'erreur. Hibernate n'a pas pu faire le lien entre les deux instances chargés à cause du hash/equals non inexistant...

    Bon, ca peut paraitre hérétique pour un initié à hibernate, je le conviens .

    En tout cas ca marche, et j'ai compris comment hibernate gère son cache .

    Merci pour l'intervention.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 28
    Par défaut même pb
    Pour une application J2EE, j'utilise JSF et effectue une sauvegarde de mon objet hibernate via un saveState.

    Après restauration, si j'effectue un update j'ai le message d'erreur "a different object with the same identifier value was already associated with the session"

    Les méthodes equals et hashCode sont implémentées. En gros, le hash code est calculé à partir de l'id de l'enregistrement et equals compare les ids.
    En mettant un point d'arrêt je constate qu'hibernate monte l'erreur sans y passer.


    Avez-vous une idée ? svp

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 28
    Par défaut Association 2 instances à un même objet/id
    http://svn.atlassian.com/fisheye/bro...Exception.html

    This exception is thrown when an operation would break session-scoped identity. This occurs if the user tries to associate two different instances of the same Java class with a particular identifier, in the scope of a single Session.

    Et pourquoi pas ?

    Est-il possible de désactiver ce contrôle ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2009, 22h28
  2. different object with the same identifier was already associated with the session
    Par lextaz33 dans le forum Développement Web en Java
    Réponses: 6
    Dernier message: 02/03/2009, 14h36
  3. Réponses: 1
    Dernier message: 12/01/2009, 17h52
  4. Réponses: 1
    Dernier message: 27/10/2008, 17h08
  5. Réponses: 2
    Dernier message: 27/07/2007, 09h21

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