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 :

[Hibernate] rafraichissement données d'Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut [Hibernate] rafraichissement données d'Hibernate
    Bonjour à tous,

    Je suis confronté à un probleme bizarre ... Quand j'ouvre une fenetre qui me permet de modifier des données d'un objet mappé Hibernate, une fois validé, les données sont bien modifiés dansla mbase (mySql) mais quand j'ouvre à nouveua la fenetre, j'ai encore les anciennes valeurs qui aparaissent ....

    J'ai essayé de rajouter un flush dans la servlet de modification, mais ca change rien ...

    Quelqu'un peut m'aider ???

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    vide le cache de ton explorer
    ou bien tu peux faire en sorte que ton URL devient unique en lui fixant un id

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ben je vais pas demander aux visiteurs futurs de devoir vider leur cache a chaque fois !!!
    J'imagine qu'à chaque chargement de la page, il va rechercher les données. Je pense que le probleme vient juste du fait que Hibernate ne vas pas systématiquement rechercher dans la base, mais reste sur ses données qu'il a mémorisé ...

    Je me trompe ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    As tu mis a jour ton cache d'objets java...
    Peux tu nous mettre du code, stp?

    ++

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Voici le code de ma servlet, je suppose que c ca qu'il fallait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class ServletModifyProfile extends HttpServlet {
     
    		public void init() {
     
    		}
     
    		public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
     
    			net.sf.hibernate.Session sessionHib = null;
    			net.sf.hibernate.Transaction tx = null;
    			TInstitution institution=null;
    				try {
    					sessionHib = HibernateUtil.currentSession();
    					tx = sessionHib.beginTransaction();
    					institution = (TInstitution) sessionHib.load(TInstitution.class, new Integer(request.getParameter("idInst")));
    				} catch (HibernateException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
     
     
    			institution.setInstitutionAcronym(request.getParameter("instAcro"));
    .../.....
     
    			try {
    				sessionHib.save(institution);
    				tx.commit();
    				sessionHib.flush();
    				HibernateUtil.closeSession();
    				response.sendRedirect("/Autre page.jsp");
    			} catch (HibernateException e1) {
    				try {
    					// TODO Auto-generated catch block
    					tx.rollback();
    				} catch (HibernateException e2) {
    					// TODO Auto-generated catch block
    					e2.printStackTrace();
    				}
    				e1.printStackTrace();
    			}
     
    		}
    }
    C'est quoi cette histoire de cache d'objet ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Peux tu nous en dire plus quant à ton probleme de rafraichissement: Qu'est ce qui ne se raffraichi pas?? L'acronyme de ton institution??

    Pour ce qui est du cache d'objet ceci est valable quand tu a un "objet o" qui contient une liste d'"objets o2" (en inverse="true") et si o2 est en cascade="save-update" sur o alors si tu crée un objet o2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MonObj2 o2 = new MonObj2();
    o2.setObj1(0); //Reference à o

    alors il faut que tu penses a faire (pour mettre à jour ton graphe d'objets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    o.getListObjets2.add(o2);
    Ainsi lorsque tu dresses la liste des objets o2 de o après la sauvegarde, le nouvel objet o2 est présent dans la liste

    J'espère que tu a pu comprendre
    Mais visiblement ça n'a pas l air d'être le cas...

  7. #7
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Concretement :
    J'ai différentes institutions dans une base. Je veux modifier le profile de l'une d'entre elles. Pour cela, je clique sur un bouton, ca m'affihe une page jsp qui contient les informations déja existantes sur cette institution (notammenet son acronyme).

    Par exemple, je modifie son acronyme, je valide le formulaire. La servlet fait lesmodif dans Hibernate et je suis redirigé vers une autre page.

    Si je vérifie dans MySql à cet instant précis, la modification est bien prise en compte dans MySQL.
    Par contre, si je retourne dans la page pour modifier à nouveau, la modification n'apparait pas. C'est l'acronyme original qui apparait ....

    par contre, en fermant le navigateur et en le reouvrant, en retournant sur la page des modifications, il apparait bien ma modification ...

  8. #8
    Membre régulier Avatar de java_fun
    Inscrit en
    Novembre 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 117
    Points : 102
    Points
    102
    Par défaut
    bonjour, :o

    je comprend pas ton code dans le passage suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try { 
                sessionHib.save(institution); 
                tx.commit(); 
                sessionHib.flush(); 
                HibernateUtil.closeSession(); 
                response.sendRedirect("/Autre page.jsp");
    pourkoi tu enregistre l objet institution dans la session hibernate au lieu de la session du serveur !! et apres tu fs un flush je vois pas l utilité !!

    je te conn de passer tes paramètre dans la session de la servlet pas de hibernate!!!

    cordialement

  9. #9
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ben a vrai dire, c'est comme ca que j'avais vu dans le tuto Hibernate&Eclipse sur developpez.com ...

    L'objet institution, pour qu'il se stocke dans la base, c'est bien la session Hibernate qui doit le sauvegarder, non ??

    Si je le sauvegarde dans ma session Tomcat, il va jamais etre sauvegardé dans ma base ...

    Le flush, par contre, je suis d'accord, c peut tre inutile ...

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par java_fun
    bonjour, :o

    je comprend pas ton code dans le passage suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try { 
                sessionHib.save(institution); 
                tx.commit(); 
                sessionHib.flush(); 
                HibernateUtil.closeSession(); 
                response.sendRedirect("/Autre page.jsp");
    pourkoi tu enregistre l objet institution dans la session hibernate au lieu de la session du serveur !! et apres tu fs un flush je vois pas l utilité !!

    je te conn de passer tes paramètre dans la session de la servlet pas de hibernate!!!

    cordialement
    Je crois que tu confonds là
    En fait la session Hibernate dans le cas présent permet de faire persister un objet (qui était détaché) en base de données ... rien à voir avec la mise d'un objet en session.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    peux tu nous donner le code de "Autre page.jsp" stp?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    je pense qu'il faut que tu identifie ton problème.

    1 - c'est un problème de rafraichissement de la page Html.
    2 - c'est un problème de rafraichissement des données de la session Hibernate.

    Pour cela essaie de déboger la partie de ton source qui récupère les objets en base avec Hibernate, tu pourras t'assurer ainsi que la version de ton objet institution est correcte après une modification.

    PS : le flush est inutile (automatiquement fait lors d'un commit).

  13. #13
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Bon j'ia débugger un peu, et du coup ca m'a donné une idée....

    J'ia mis un system.out.println(institution.getWebSite) sur la page de destinaiton une fois validée la modif (autrepage.jsp). Et la modificaiton n'apparait toujours pas.

    Mais, voici le fonctionnement global :
    Je suis dans des pages ou l'authentification est nécessaire. Une fois authentifié, un objet user est mis en session, et accessible sur chaque page par un bean.
    Le user contient l'objet institution.

    Et j'ai remarqué qu'après modification, si je me relogge avec le meme login, la maj apparait bien ...

    Donc c'est comme si l'objet user ne se rendait pas compte que son objet intégré institution était modifié ...
    Peut etre devrais je supprimer l'objet user en session et le réinstancier, comme si le visiteur se réauthentifiait , non ?


    Je veux bien vous mettre le code de autrepage.jsp, mais je suis pas sur que ca vous apporte grand chose ... Et pi il est long ...

  14. #14
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Un petit up histoire de ...

    Promis, j'en ferai pas deux, mais bon, j'arrive pas a trouver de solution ....

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    d'apres le code de ta servlet, tu ne modifie pas l'objet institution en session mais tu le récupère depuis la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     institution = (TInstitution) sessionHib.load(TInstitution.class, new Integer(request.getParameter("idInst")));
    evidemment l'objet en session n'est pas modifié.

    2 solutions
    1 - tu récupère l'objet institution présent dans la session pour le modifier (les modifications seront visible pour l'utilisateur qui à fait la modification mais pas pour les autres utilisateurs déjà connectés et qui utiliseraient la même institution). Il te faut donc stocker toutes les sessions des utilisateurs connectés dans un tableau afin de mettre à jour l'institution en cas de modification.

    2 - tu ne stocke pas l'objet dans la session mais tu le récupère depuis la base grace à Hibernate à chaque nouvelle page. Avec le systeme de cache ceci ne devrait pas être trop pénalisant.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Je me pose une question:
    Ta récupération de l'objet persistant et sa modification fonctionne très bien. Mais comment utilises tu l'objet institution après... (pour l'afficher dans la jsp par exemple) Tu le récupères de la session HTTP?????

  17. #17
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ouais en effet, je récupere l'objet user stocké dans la session (suite à authentification) et j'extrais du user l'institution. De la decoule l'affichage des attributs de l'institution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(institution.getUnivWebSite());
    Mais d'apres ce que je comprend (grace a vous !! /D) , le probleme vient du fait que le mes pages jsp récupère l'institution dans le user stocké en session, qui n'est donc plus forcément synchro avec la base ...

    Du coup, le plus simple serait surement de mettre à jour l'objet user stocké en session. En faisant un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.setInstitution(institution);
    Qu'en pensez vous ?

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par michaelbob
    Ouais en effet, je récupere l'objet user stocké dans la session (suite à authentification) et j'extrais du user l'institution. De la decoule l'affichage des attributs de l'institution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(institution.getUnivWebSite());
    Mais d'apres ce que je comprend (grace a vous !! /D) , le probleme vient du fait que le mes pages jsp récupère l'institution dans le user stocké en session, qui n'est donc plus forcément synchro avec la base ...

    Du coup, le plus simple serait surement de mettre à jour l'objet user stocké en session. En faisant un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.setInstitution(institution);
    Qu'en pensez vous ?
    Enfin tout devient plus clair
    C'est une solution acceptable, mais attention a ne pas trop alourdir la session utilisateur...

  19. #19
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    OK !

    Merci en tout cas pour votre aide a tous !!! J'y vois beaucoup plus clair grace a vous ... 8) 8)

  20. #20
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    As tu trouvé une solution ?

    Sinon, je ne comprend rien à vos discussions !!
    Hibernate ou pas, si tu charges un objet, que tu le modifies en mémoire puis que tu le sauves dans la base et que tout est ok, je ne vois pas comment tu peux avoir des problèmes ? (à part une page en cache côté navigateur)
    La seule situation que j'arrive à imaginer est que tu as 2 tiers, un client et un serveur, tu charges la donnée sur le serveur, tu la donnes au client qui la modifie et tu repasses par le serveur pour la sauver sans mettre à jour la donnée que tu avais préalablement chargé sur le serveur. Et tout cela en le faisant vraiment exprêt pour te foutre toi même dans la m..de.

    Le problème est-il là où tu le crois ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Plusieurs bases de données avec Hibernate
    Par khalid_kha dans le forum Hibernate
    Réponses: 7
    Dernier message: 14/08/2008, 13h36
  2. Problème récupération données struts/hibernate
    Par Syham dans le forum Struts 1
    Réponses: 9
    Dernier message: 12/03/2008, 10h48
  3. Modification des données avec hibernate
    Par kadel dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/08/2007, 14h29
  4. Réponses: 1
    Dernier message: 14/02/2007, 10h48
  5. probleme de chargement de donnes mysql hibernate 3
    Par mathieujava dans le forum Hibernate
    Réponses: 3
    Dernier message: 22/01/2007, 15h06

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