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 :

Maj non voulue d'un object lors d'une lecture


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 36
    Points : 22
    Points
    22
    Par défaut Maj non voulue d'un object lors d'une lecture
    Bonjour,

    Voici mon pb:
    J'ai 2 threads qui veulent accéder en lecture à un même object.
    Le 1er passe, le 2ieme non, j'ai une erreur StaleObjectStateException.

    L'object en question possède une collection (set) d'autres entités (je pense que c'est important de le noter). Le set a les propriétés suivantes: lazy=false, cascade=all.

    En regardant de plus près les traces d'hibernate, je m'aperçcois que le premier thread change le numéro de version de l'object en question.
    Donc qd le thread veut lui aussi changeait le numero de version de l'object, ya l'exception qui est lancée.

    Donc ma question est: pq hibernate fait-il un update (pour juste changer le numéro de version) sur cet object, alors que je n'appelle que des select?

    Merci bcp.
    Nico

  2. #2
    Invité
    Invité(e)
    Par défaut
    Désolé, je n'ai pas la réponse précise à ta question.

    Mais je me permet d'intervenir pour te dire que je suis d'accord avec toi : a priori s'il n'y a que des SELECT qui sont réalisés alors il n'y a pas de raison que le numéro de version soit modifié.

    Je pense donc que tu devrais vérifier les requêtes qui sont jouées par Hibernate. (si t'utilise Log4j il suffit d'ajouter un appender sur le bon package Hibernate ou voir du coté de show_sql dans le fichier de config Hibernate).
    Y a peut être un UPDATE qui est joué, à toi de voir lequel et pourquoi.
    S'il n'y en a pas, peut être aussi voir les SELECT FOR UPDATE. Cela peut arriver si tu fais des lock() avec LockMode.UPGRADE

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    J'ai enfin trouvé mon pb.
    Et bien entendu, ct gros comme une maison :-)

    En fait, avant de restituer mon premier object, qui possède une collection d'entité, je modifie (filtre pour etre precis) cette collection ( Set.clear() puis Set.addAll()).
    Et hibernate détecte cette modification (puisqu'il surveille les methodes en ecriture sur les entités) et donc génére un update sur la version de mon object pour indiquer que qqch a changé.

    Voila, j'espère que j'ai été clair...
    Merci

    Nicolas

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

Discussions similaires

  1. [PHP 5.3] Perte de caractères lors d'une lecture de fichier
    Par Vince57 dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2010, 19h03
  2. stack smashing detected lors d'une lecture de fichier
    Par Dave62 dans le forum Débuter
    Réponses: 5
    Dernier message: 06/11/2009, 13h50
  3. Problème de split lors d'une lecture d'un fichier csv
    Par Mawinette dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 25/03/2009, 11h48
  4. [VB.NET]Comment afficher 1 progressbar lors d'une lecture fichier ?
    Par evlp2004@hotmail.com dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/05/2006, 09h00
  5. Réponses: 11
    Dernier message: 27/04/2006, 08h56

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