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 d'instance identique


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut Probleme d'instance identique
    Bonjour,
    J'utilise Hibernate 3.2, avec jbosscache 1.4.1, jotm 2.0.9 et spring 2, (sur un tomcat 5.5).

    J'ai un gros problème d'instance.

    En gros, je récupère un objet depuis la base de données en faisant un get. Ceci me retourne une instance, que je vais modifier. Je ne sauvegarde pas ces modifications en base, ni save, ni update ni quoi que ce soit.

    Plus loin (mais dans la même jsp) je ferais un get, en utilisant le meme identifiant. Et la, hibernate me retourne exactement la même instance (d'une part je retrouve mes modifications, et surtout System.identityHashCode me retourne la même valeur pour les deux objets).

    Si je recharge la page, le comportement est le même, sauf que la valeur de identityHashCode a changé (même si elle reste identique pour les deux objets).

    Quelqu'un aurait il la moindre idée du pourquoi/comment? Please help me, je sèche la...

  2. #2
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Et bien je suis désolé de te dire qu'Hibernate fonctionne très bien.

    En fait dans la session Hibernate il y a un cache de premier niveau qui mémorise les objets déjà chargés (C'est plus un context de persistance et non un cache).

    Donc si tu demandes 2 fois le meme objet tu auras la meme instance ( à condition de ne pas avoir fait clean, evict, close sur ta session), avec les modifications apportées.

    Si tu te demande a quoi sert ce cache ; je dirais en gros dans une base de données tu as une ligne avec un id particulier, et bien dans ton context transactionnel tu as une fois ton instance pour l'id donné (je te passe les détails sur le chargement de ton graphe d'instance).

    Enfin je tiens à porter à ta connaissance qu'un session.update(obj) ne fait rien si ton objet est rattaché à la session.

    La detection de modification se fait via le dirty checking lors du commit ou lors de l'éxécution d'une requete qui concerne l'objet modifié (ie : si tu modifies un objet Chat et que tu lances une requete comme : from Chat , Hibernate passe l'update a ce moment la)... grosse suprise garantie avec les session.refresh()

    La question que je me pose c'est pourquoi modifier cet objet, autant créer une nouvelle instance via un new.

    Stéphane

Discussions similaires

  1. Probleme d'objet identique
    Par Ylias dans le forum JPA
    Réponses: 16
    Dernier message: 12/06/2008, 19h27
  2. Réponses: 8
    Dernier message: 15/02/2007, 14h14
  3. Probleme de Champ identique dans une CListCtrl
    Par poseidon2 dans le forum MFC
    Réponses: 2
    Dernier message: 27/12/2006, 18h48
  4. Probleme d'instances de JLabel
    Par Crypt dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 20/04/2006, 17h58
  5. Probleme de instance
    Par Conficius dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2005, 21h21

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