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 coherence sur les reponses.


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut Probleme coherence sur les reponses.
    Bonjour,
    Je decris mon probleme :
    Je fais un update sur un champs "A" sur une entree de ma base.
    Je fais un flush et un clear sur mon objet session d Hibernate.
    La base (MYSQL) est bien a jour avec la nouvelle donnée.

    Je selectionne l objet via l API Criteria.
    La valeur du champs "A" sera soit la nouvelle soit l ancienne valeur.
    et Cela aleatoirement chaque fois que je fais la meme requete "SELECT".

    Si je fais un "session.clear" avant de faire mon "SELECT" c est ok j ai la bonne valeur mais cela reste problematique.

    J utilise le pool c3P0 avec maxstatement a 0.
    La cache de niveau 2 est normalement desactive.
    je suis avec Hibernate 3.1.3 et les derniers Driver JDBC
    j ai tous mis a jour hier. et ca n a pas corrige le probleme.

    Quelqu un a t il un idee du probleme et surtout de la solution ?

  2. #2
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Hibernate conserve les objets en session (appelé donc "cache de session, premier niveau"). C'est pourquoi, leur valeur lors de la récupération des mêmes requetes est souvent problématique si l'objet a déjà été chargé dans la même session. Egalement il utilise aussi des caches de second niveau (applicatif) ainsi qu'un cache de requete SQL.

    Les seules solutions pour etre sur d'obtenir les mêmes données sont :
    -session.clear()
    -un nouveau load pour trouve rl'objet à partir de l'identifiant.
    -session.refresh(object) pour qu'il mette à jour ses champs.

    L'utilisation de l'API Criteria n'oblige pas forcément Hibernate à rafraichir un objet ...
    La troisieme solution juste après la requete peut donc s'avérer judicieuse mais elle implique un second accès en base.
    La première est beaucoup trop brutale (imagine que tu veuilles conserver certains objets du cache !!!)
    Reste la seconde du coup mais il faut récuperer la clé de l'objet en question auparavant

  3. #3
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    ok merci, comme je disais la solution du clear, je trouvais ça pas top top.
    mais elle fonctionne .
    Pour la deuxieme solution avec le load j ai le meme probleme, il me ressort l ancienne valeurs. (pour tout les requetes de lecture j ai le probleme) .

    J ai pas encore tenter la solution avec le refresh, c est pas la panacee mais si ca fonctionne cela sera moins contraignant que le clear.
    Je vais essayer des lundi matin,

    Merci encore

  4. #4
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Effectivement je suis oblige de faire un refresh ou un clear sur l objet session avant chacun de mes "SELECT". Comment utiliser la cache de façon plus correcte que cela ?

  5. #5
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Euh, peut etre en vérifiant que le cache second niveau est bien désactivé ainsi que le cache de requete SQL. Il peut s'agir de l'un deux qui fausse les résultats.

    Une autre solution serait de clore la session entre les deux requêtes mais bon, ca n'est pas forcément des plus adaptés et surtout, ca revient au même principe que le session.clear().

    Je ne pense pas que tu aies réellement le choix. Soit tu isoles l'appel à la requête dans une fonction et cache ainsi le session.refresh(), soit tu effaces ou fermes ta session entre les deux requêtes.

    Bon courage en tout cas

  6. #6
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Le cache de second niveau est bien desactive.
    pour le cache de requete sql j ai mis la propriete maxStatement a "0" il est dit dans la doc que cela desactive la cache des requetes mais au vu de mes resultats j ai quand meme un gros doute.

    J ai créé un objet qui encapsule les operations sur l objet session ce qui me permet d'avoir des resultats exact mais au prix d un clear() a chaque lecture.

Discussions similaires

  1. probleme(s) sur les classes
    Par Pillow dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2010, 10h54
  2. probleme Exo sur les ABR
    Par benjy13 dans le forum Autres SGBD
    Réponses: 0
    Dernier message: 17/06/2009, 19h21
  3. Probleme Serieux Sur Les Constructeurs
    Par aderfat dans le forum C++
    Réponses: 31
    Dernier message: 10/07/2007, 17h03
  4. probleme action sur les JComboBox
    Par L4BiN dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 21/12/2006, 16h03

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