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. #21
    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
    Voici l'erreur que je recuper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
    log4j:WARN Please initialize the log4j system properly.
    Initial SessionFactory creation failed.
    java.lang.NullPointerException
            at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1529)
            at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
            at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
            at socgen.portail.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:46)
            at socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:24)
            at socgen.portail.action.ConnexionAction.execute(ConnexionAction.java:51)
    ...
    Le Initial SessionFactory creation failed. m'inquiete

  2. #22
    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 804
    Points
    48 804
    Par défaut
    comme je t'ai dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    configure("/socgen/portail/hibernate/")
    c'est pas bon, faut mettre le path d'une ressource de type fichier de mapping, pas le path d'un package.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    configure("socgen/portail/hibernate/users.hbm.xml")
    si ton fichier se trouve dans WEB-INF/classes/socgen/portail/hibernate/users.hbm.xml

  3. #23
    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
    Desolé

    (Je n'avai pas mes fichiers .xml dans le dossier classes... Ceci explique cela )

    J'ai corriger le probleme dans le hibernat.cfg.xml, mon passe etait pas bon. vu qu'ils sont dans le meme dossier au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mapping resource="/WEB-INF/classes/user.hbm.xml"/>
    Il fallai que je mette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mapping resource="/user.hbm.xml"/>
    Apres j'ai changé le path dans configure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sessionFactory = new Configuration().configure("/WEB-INF/classes/user.hbm.xml")
    Maintenant j'ai de nouvelle erreur :
    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
    javax.servlet.ServletException: java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
     
    cause m�re
     
    java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    	socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:24)
    	socgen.portail.action.ConnexionAction.execute(ConnexionAction.java:51)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
    Merci tu as une patience d'ange

  4. #24
    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 804
    Points
    48 804
    Par défaut
    ma patience d'ange va avoir des limite. As-tu lu le message d'erreur avant de le poster. La première chose à faire est de le lire. Il y a un numéro de ligne et une raison de l'erreur. En l'occurence celle-ci est assez évidente à trouver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    	socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:24)

  5. #25
    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
    Pardon je suis allez un petit peu vite, le proble se retrouve a la meme ligne que la dernier fois soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session = (Session) HibernateUtil.currentSession().beginTransaction();
    L'erreur est toujour dans la création de la sessionFactory dans le HibernateUtil ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sessionFactory = new Configuration().configure("/WEB-INF/classes/user.hbm.xml")
    qui ne me renvoi rien.

    Mais si je ne met rien dans la fonction .configure(), dans UtilisateurMapping,
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session = (Session) HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
    et le trace me met "No CurrentSessionContext configured!" et la je bloque.

    et le programme plante a la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (user) session.createSQLQuery("select * from User where login ="+ login);
    avec l'erreur :
    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
    javax.servlet.ServletException: java.lang.NullPointerException
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
     
    cause m�re
     
    java.lang.NullPointerException
    	socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:31)
    	socgen.portail.action.ConnexionAction.execute(ConnexionAction.java:51)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

  6. #26
    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 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sessionFactory = new Configuration().configure("/WEB-INF/classes/user.hbm.xml")
    Je sais meme pas comment tu imagine que ça ca puisse compiler, configure te renvoie un objet de type configuration, il manque l'appel à buildSessionFactory() pour avoir une sessionFactory.

    configure prend un chemin pointant vers un fichier de config hibernate, là tu le fait pointer vers un fichier de mapping, c'est pas la meme chose. Soit tu met rien et il ira comme un grand prendre WEB-INF/classes/hibernate.cfg.xml, soit tu met le chemin vers ton fichier de config si il est ailleurs (et s'il te plait, ne met pas /WEB-INF/classes, les ressources c'est pas relatif à la racine de ta webapp, c'est relatif au classpath, qui est formé de WEb-INF/classes + tout ce qui se trouve dans WEb-INF/lib/*.jar + tout ce qui est fournis par ton conteneur).

    Si tu veux rajouter manuellement des mapping, soit après l'appel à configure tu faire un appel à addClass(), soit tu faire un appel à addRessource().

  7. #27
    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
    Pardon c'etait la 3eme fois que je modifier ce post donc mon copier collé a eut un raté. la ligne de création de la sessionFactory est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sessionFactory = new AnnotationConfiguration().configure("/user.hbm.xml").buildSessionFactory();
    Desolé d'avoir induit en erreur.

    Si non j'ai mon hibernate.cfg.xml dans le dossier WEB-INF/classes
    user.hbm.xml dans socgen/portail/hibernate/mapping
    user.java dans socgen/portail/hibernate/mapping

    Mais comme je disai avant j'ai la l'erreur :
    "No CurrentSessionContext configured!"

    Lorsque je creer la session

  8. #28
    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 804
    Points
    48 804
    Par défaut
    rejoute ca dans ton fichier de configuration hibernate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.current_session_context_class">thread</property>
    pour retirer ce message (qui n'empeche normalement pas le démarrage d'hibernate)


    et encore un fois, ce configure ne dois pas pointer sur un fichier hbm.xml!!!!

  9. #29
    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 vien de le faire mais cela ne marche pas non plus. ca plante a la creation de la session a .beginTransaction();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session = (Session) HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
    La page d'erreur devient :
    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
    javax.servlet.ServletException: java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
     
    cause m�re
     
    java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    	socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:23)
    	socgen.portail.action.ConnexionAction.execute(ConnexionAction.java:51)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

  10. #30
    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 804
    Points
    48 804
    Par défaut
    l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction
    ta ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session = (Session) HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
    Je crois qu'il suffit de regarder un peu et lire le message d'erreur pour voir que ton problème est que t'essaie de caster un object de type JDBCTransaction en objet de type Session!

  11. #31
    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
    Bonjour,

    C'est bon je recupere bien les données!
    Je te remerci tu m'as apprit pas mal de choses et je peut enfin sortir la tete du bocal.

    J'ai une petite question pour cloturer cette discussion

    Je recupere les données par ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query query = session.createSQLQuery("select * from User where login ='" + login+"'");
    List result = query.list();
    Ce qui pose un certain probleme car il serai mieu de mettre les donnée dans une variable User. Dans certain forum il propose cette solution :
    Qui entraine inevitablement
    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
    javax.servlet.ServletException: java.lang.ClassCastException: org.hibernate.impl.SQLQueryImpl
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
     
    cause m�re
     
    java.lang.ClassCastException: org.hibernate.impl.SQLQueryImpl
    	socgen.portail.hibernate.mapping.UtilisateurMapping.selectUser(UtilisateurMapping.java:37)
    	socgen.portail.action.ConnexionAction.execute(ConnexionAction.java:51)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
    Quelle serait la bonne methode de reccuperation des données pour les manipuler? stp
    Merci

  12. #32
    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 804
    Points
    48 804
    Par défaut
    je crois que tu lit mal les forums

    soit tu fait query.list() pour obtenir la liste des résultat
    soit tu fait query.uniqueResult() pour obtenir un seul résultat

  13. #33
    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
    Avec soit "query.list()" je recupere une listecela arche bien. mais query.uniqueResult() qui devrait me renvoier un objet de type User.
    Ma table de donnée a etait creer de la maniere suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE user (login varchar(40) NOT NULL,
    mdp varchar(40), 
    primary key (login));
    Ma class User (ou event si tu prefert) :
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package socgen.portail.hibernate.mapping;
     
    public class User {
     
        private String login;
     
        public String getLogin() {
            return login;
        }
     
        public void setLogin(String login) {
            this.login = login;
        }
        private String mdp;
     
        public String getMdp() {
            return mdp;
        }
     
        public void setMdp(String mdp) {
            this.mdp = mdp;
        }
    }
    Mon fichier mapping :
    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" length="40" name="login" type="java.lang.String" unsaved-value="">
            </id>
        <property name="mdp">
          <column length="40" name="mdp"/>
        </property>
      </class>
    </hibernate-mapping>
    Normalement je devrai pouvoir placer le resultat dans un objet User, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.createSQLQuery("select * from User where login ='" + login+"'");
    Etant donner que je recuper les donner de la base en fonction de la classe User.java, on devrait pouvoir recuperer un objet de la meme class. par la methode precedante que je retrouve entre autre sur :
    http://docs.jboss.org/hibernate/stab..._reference.pdf
    http://docs.jboss.org/hibernate/stab...rformance.html
    http://www.bourzeix.com/weblog/post/...let-partie-iii

    Ou par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = query.uniqueResult();
    On est pas obligé de faire une boucle for et a charger l'objet à la main?
    La fonction load eventuelement mais je ne comprend pas trop son fonctionnement et j'ai bien peur qu'elle me renvoi une erreur

  14. #34
    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 804
    Points
    48 804
    Par défaut
    Citation Envoyé par totonin Voir le message
    Normalement je devrai pouvoir placer le resultat dans un objet User, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.createSQLQuery("select * from User where login ='" + login+"'");
    Non, et manifestement pour mettre du code pareil, tu ne maitrise pas les bases de java. Je te suggère donc de commencer par là avant de t'attaquer à des outils comme hibernate. On ne peux pas caster tout et n'importe quoi en d'autres tout et n'importe quoi comme ça. On peux typcaster que si on sait que la fonction retourne bien un objet du type mentionné. Et au dernières nouvelles un objet de type "Query" n'a rien à voir avec un objet de type "User"
    Ou par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = query.uniqueResult();
    Il manque le typecasting là, uniqueResult a pour signature "public Object uniqueResult();"

  15. #35
    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
    Salut totonin,

    Premièrement, je te conseil de ne pas utiliser directement des requêtes SQL, pour une raison très simple.
    Les intérêts majeurs d'un outil comme Hibernate ce sont sa portabilité et le gain de temps lors de faces de développement, avec une requête SQL en dur, tu perds ces deux avantages.

    Ensuite, pour ton exemple :
    En fait, sur Hibernate tu peux récupérer les objets demandés de trois manières distinctes.

    1) La méthode "uniqueResult" qui est utilisé surtout quand tu fais un count ou lorsque tu es sûr et certain que ta requête récupéra un seul et unique objet.
    2) La méthode "list" qui va te renvoyer une liste contenant l'ensemble des objets de la requête, il faut faire très attention avec cette méthode parce que si ta requête récupéré trop d'objets tu risques d'avoir un OutOfMemory.
    3) La méthode "iterate" qui est celle que je te conseille, te permet de récupérer tes objets un par un.

    Si je prends ton exemple, je ferais :
    D'abord une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final int MAX = 8000;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String request = "select * from User where login ='" + login + "'";
    Query myQuery = session.createSQLQuery(request);
    Iterator iter = myQuery.iterate();
    int counter = 0;
    User user;
    while(iter.hasNext()
             && counter<MAX){
       counter++;  
       user = (User)iter.next();
    }
    Après, en réglé générale tu ajoutes tes utilisateurs une Collection, de sorte de respecter de Patron de conception DAO et ainsi séparer tes comportements métier de la persistance à la base des données.

    Voila, en espérant que cela puisse te débloquer.

  16. #36
    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
    Merci parsifal pour toute ces indications mais

    Citation Envoyé par parsifal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final int MAX = 8000;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String request = "select * from User where login ='" + login + "'";
    Query myQuery = session.createSQLQuery(request);
    Iterator iter = myQuery.iterate();
    int counter = 0;
    User user;
    while(iter.hasNext()
             && counter<MAX){
       counter++;  
       user = (User)iter.next();
    }
    Ne marche pas. j'ai une erreur a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Iterator iter = myQuery.iterate();
     
    javax.servlet.ServletException: java.lang.UnsupportedOperationException: SQL queries do not currently support iteration
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
     
    ...
    La fonction .load() ne pourrai pas etre utile dans ce cas vu que j'effectue une recherche par clef primaire (login). Donc session.load(user,login) devrai me charger le user enfonction de sa clef primaire (login). mais ca ne marche pas non plus...
    je tire cette exemple de
    http://www-igm.univ-mlv.fr/~dr/XPOSE2004/msamson/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.load(User.class, login);
    Mais je user.getLogin et user.getMdp sont null... et il ne me renvoi pas d'erreur...

  17. #37
    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
    Hmmm, désolé pour iterate, encore une bonne raison de ne pas utiliser du SQL directement dans Hibernate.

    En fait, je dirais tout dépends de ce que tu veux faire, load va te permettre d'aller cherche un seul objet à partir de son identifiant, alors qu'un objet query te permet demander à ta base des données.

    Maintenant, juste pour ton exemple, load devrait marcher.
    Donc regarde ton paramétrage et si la valeur de login correspond vraiment à l'identifiant de base de données (Attention aux espaces et aux majuscules) .

  18. #38
    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 804
    Points
    48 804
    Par défaut
    comme je l'ai déjà dit, pour un seul objet sur base d'un query HQL -> utilise la méthode uniqueResult qui te retourne l'objet en question.

  19. #39
    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
    Le probleme c'est qu'avec
    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();
    On recupere le la bonne donnée

    Mais qu'avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user = (User) session.load(User.class, login);
    On recupere rien... alors que c'est le meme login...

  20. #40
    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 804
    Points
    48 804
    Par défaut
    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)
    2) évite les SqlQuery, c'est à n'utiliser qu'en dernier ressort
    3) pour charger 1 seul élément suite à une query, utilise uniqueResult.

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

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