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 :

[Debutant] [struts] Probleme avec hibernate


Sujet :

Hibernate Java

  1. #41
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 45
    Points
    45
    Par défaut
    Je cherche a utiliser les bonne methodes mais

    Citation Envoyé par tchize_ Voir le message
    alors on va répeter

    1) load: c'est pour charger par Id (suivant donc dans ton mapping ce que tu a défini comem étant l'id, généralement on utilise un long)
    Ne marche pas, comme je le disai plus haut et encor plus haut,ou je ne sais pas l'utilisé convenable, mais j'ai afficher la fonction que j'utilise plusieur fois et il n'y a pas eut de critique sur celle-ci pour l'instant
    Citation Envoyé par tchize_ Voir le message
    2) évite les SqlQuery, c'est à n'utiliser qu'en dernier ressort
    Ca ca marche, c'est mieu que rien
    Citation Envoyé par tchize_ Voir le message
    3) pour charger 1 seul élément suite à une query, utilise uniqueResult.
    ne fonctionne pas j'ai utilisé differente methode dont l'un d'un forum
    http://www.developpez.net/forums/d11...tionexception/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Criteria crit=session.createCriteria(User.class);
                crit.add(Expression.eq("User.login",login));
                user0 = (User) crit.uniqueResult();

  2. #42
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    SQLQuery, évite d'utiliser ça, il est très très rare d'en avoir besoin, une requte HQL est suffisante dans la pluspart des cas:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User user = (User)session.createQuery("from User where login=:login").setParameter("login",leLogin).uniqueResult();
    est largement suffisant (pour autant que User aie bien une propriété "login" et que cette propriété soit mappée au niveau d'hibernate)

  3. #43
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Heu... rends toi service et rends nous service, sinon on arrivera jamais...
    Évite de tout changer et tout mélanger.

    D'abord pour load, j'ai un doute, je m'en sert pas beaucoup, mais peut-être que tu as besoin d'ouvrir une transaction avant d'utiliser load.
    session.beginTransaction();

    Pour le SQLQuery, et bien dans un cadre professionnel il faut l'éviter, mais essaye de finir ton exemple et fait marcher ton comportement avant de te lancer dans les criteria et le HQL. Ne cumule pas trop de problèmes d'un coup.

    Essaye déjà de comprendre pourquoi ton exemple ne marche pas, ensuite regarde la documentation d'hibernate sur les Criteria et le HQL qui est plutôt bien faite.

    Soit dit en passant, ton code marchera mieux comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Criteria crit=session.createCriteria(User.class);
    crit.add(Expression.eq("login",login));
    user0 = (User) crit.uniqueResult();

  4. #44
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par parsifal Voir le message
    D'abord pour load, j'ai un doute, je m'en sert pas beaucoup, mais peut-être que tu as besoin d'ouvrir une transaction avant d'utiliser load.
    session.beginTransaction();
    beginTransaction 'a rien à y voir. Si le load marche pas, c'est que le user avec ce login n'existe pas (vu que son mapping utilise le login comme id)

  5. #45
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si le load marche pas, c'est que le user avec ce login n'existe pas (vu que son mapping utilise le login comme id)
    Mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String request = "select * from User where login ='" + login + "'";            
                Query myQuery = session.createSQLQuery(request);
                List result = myQuery.list();
    Ca ca marche avec le login ="a" et ca me renvoi bien les données

    tandi que la ligne suivante (avec le meme login=a) ca ne marceh pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.load(User.class, login);
    Pour etre sur j'ai meme fait cela qui abouti au meme resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String request = "select * from User where login ='a'";            
                Query myQuery = session.createSQLQuery(request);
                List result = myQuery.list();
                System.out.print(result.get(0));
     
                user = (User) session.load(User.class, "a");
    user2 = (User) session.load(User.class, login);
    user.login et user.mdp sont null, meme resultat avec user2, tandit que j'ai bien les données correspondantes au login = a dans la liste "result".

    meme chose avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User)session.createQuery("from User where login=:login").setParameter("login",login).uniqueResult();
    j'y crois pas trop mais, dernière chose, remplacer "java.lang.String" par "string" dans ton mapping.

  6. #46
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Tu peux mettre l'intégralité du code de ta classe ?
    Parce que ton problème ne viens pas de 4 lignes de code que tu viens de poster.

    La méthode load, renvoi une Exception lorsque il n'existe pas d'objet correspondant à l'identifiant passé en paramètre.
    http://docs.jboss.org/hibernate/stab...e-loading.html
    Donc je pense que tu dois avoir un problème avec l'initialisation de ton objet et aussi avec la capture des Exceptions d'hibernate.

  7. #47
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    si ca marche avec le createQuery mais pas avec le load, c'est que t'as changé ton mapping hibernate et que login n'est plus marqué comme id.

  8. #48
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 45
    Points
    45
    Par défaut
    A vos yeux eclairés

    user.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="socgen.portail.hibernate.mapping.User" table="User">
        <id column="login" name="login" type="java.lang.String" unsaved-value="">
            </id>
        <property name="mdp">
          <column  name="mdp"/>
        </property>
      </class>
    </hibernate-mapping>

  9. #49
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Ce fichier de mapping se trouve où dans ton application? Si tu affiche les requete sql générées par hibernate (configuration.setProperty("hibernate.show_sql","true") avant de créer la session factory), qu'est-ce que tu obtiens dans la console comme requetes sql?
    Es-tu sur de ne pas avoir un deuxième fichier de mapping ailleurs qui serait chargé prioritéairement? Peux tu confirmer que tu n'a pas mis non plus d'annotation hibernate / jpa sur ton User.java? (elles auraient priorité sur le mapping)

    Comme la réponse est ambigue, et pour éviter de partir dans le mauvais sens, tu confirme que ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User)session.createQuery("from User where login=:login").setParameter("login",login).uniqueResult();
    fonctionne bien?

    Note que la méthode load(), contrairement à la méthode get() retourne toujours un objet! (une sorte de coquille vide qui se remplira quand tu accèdera a l'objet, si il existe). Que se passe-t-il avec cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.get(User.class, "a");
    Est-ce qu'elle te renvoie un null?

  10. #50
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 45
    Points
    45
    Par défaut
    - J'ai bien verifier il n'y a qu'un seul fichier user.hbm.xml

    - Je n ai pas mi d'anotation


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User)session.createQuery("from User where login=:login").setParameter("login",login).uniqueResult();
    - Ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.load(User.class, login);
    Finalement fonctionne. En regardant user dans le debug les valeurs de login et mdp etaient null. Pour tant lorsque je fait ca ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (user.getLogin().equals(login)&&user.getLogin().equals("a")){
                    String test = "Youpi";
                }
    Test = Youpi Donc finalement tout marche Enfin!!!!!!

    Il me reste a tester les autre fonction mais tout devrai marcher.

    Merci Beaucoup maintenant on peu faire un tuto!!!

  11. #51
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par totonin Voir le message
    Finalement fonctionne. En regardant user dans le debug les valeurs de login et mdp etaient null.
    Evidement si tu t'arrête aux valeur des champs au lieu d'utiliser les getter/setter, hibernate a pas vraiment l'occasion de remplir le User.

    Note poru rappel, load renvoie toujurs un objet, meme si il existe pas sur la db. Il est simplement chargé plus tard.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [debutant][swing] Probleme avec un Jpanel
    Par JeanMoul dans le forum Débuter
    Réponses: 6
    Dernier message: 27/08/2005, 19h07
  2. [Struts] Problème avec la méthode validate
    Par clement42 dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/06/2005, 10h52
  3. Problèmes avec Hibernate (sous Eclipse)
    Par Pierric dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/04/2005, 14h35
  4. [STRUTS] Probleme avec le tiles Framework
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 7
    Dernier message: 02/10/2004, 14h11
  5. [Debutant(e)]probleme avec un replaceAll
    Par Jovial dans le forum Langage
    Réponses: 11
    Dernier message: 14/06/2004, 16h02

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