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] Quel type de données me retourne ma requête ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut [Hibernate] Le résultat de ma requête est changé
    Bonjour à tous !

    J'ai écrit une requête qui doit me retourner une durée.

    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
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    
    sql_query = "SELECT TIMEDIFF(t_soutien.date_res, t_soutien.date_aff)";
    sql_query += " from T_Dem_S t_soutien";
    sql_query += " WHERE t_soutien.etat ='Clôturée'";
    
    Query query = session.createQuery(sql_query);
    
    List data = new ArrayList();
    Time iSig;
    int i = 0;
    
    for (Iterator it = query.iterate(); it.hasNext();) {
    	Object[] row = (Object[]) it.next();
    	iSig = (Time) row[i];
    	data.add(iSig);
    	i++;
    }
    session.close();
    return data;
    Le problème vient lorsque je dois convertir mon résultat pour le sauvegarder (dans une arraylist par exemple).
    Mais une cast exception est levée :
    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
    javax.servlet.ServletException: java.sql.Time
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	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:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
     
     
    root cause 
     
    java.lang.ClassCastException: java.sql.Time
    	utils.GenerateReportsHG.getIndicateur71E5(Unknown Source)
    	utils.GenerateReportsHG.execute(Unknown Source)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	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:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
    Je voudrais savoir comment puis-je récupérer correctement le résultat de ma requête.

    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TIMEDIFF(expr,expr2)
     
    TIMEDIFF() retourne la durée entre l'heure de début expr et l'heure de fin expr2. expr et expr2 sont des expressions de type TIME ou DATETIME, et doivent être de même type.
     
    mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
            -> '-00:00:00.000001'
    mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001','1997-12-30 01:01:01.000002');
            -> '46:58:57.999999'
     
    TIMEDIFF() a été ajoutée en MySQL 4.1.1.

  2. #2
    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
    Billets dans le blog
    2
    Par défaut
    Quand tu ne connais pas le type d'un objet, "cast" le en Object et affiche obj.getClass().getName() tu verras bien le type de l'objet; que tu pourras ensuite utiliser

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Ok et merci !
    Je viens de caster l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	for (Iterator it = query.iterate(); it.hasNext();) {
    		Object monObjet = (Object) it.next();
    		Utils.Syso("Object Name :" + monObjet.getClass().getName());
    		...
    Et je récupère un java.sql.Time !
    Mais comment puis-je faire lorsque la requête me renvoie plusieurs enregistrements ??? C'est un tableau de Times ???

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Ne cherchez plus...
    C'était simple comme bonjour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Iterator it = query.iterate(); it.hasNext();) {
    		row = (Time) it.next();
    		Utils.Syso("time " + i + "_" + row);
    Maintenant, je récupère les résultats !
    Sauf que les résultats ne sont pas les mêmes
    Je m'explique :
    Dans ma requête, timediff entre le 22/06 à 08h46 et le 21/06 à 08h40 doit me renvoyer 24h06min...
    Sauf que le résultat de ma requête me renvoie 00h06min (si j'exécute la même requête directement sur une console, j'ai bien 24h06min).
    Je ne comprends plus...

  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 bah surement un probleme d'affichage ... sachant que 24h06 = 0h06 + 24h soit un jour complet... il faudrait fouiller dans ce sens je pense

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Je comprends bien que c'est un problème d'affichage...
    Je me tourne vers vous pour savoir comment résoudre ce problème qui me bloque malgrè sa simplicité...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Durée en hh:mm:ss : quel type de données
    Par humiside dans le forum Développement
    Réponses: 7
    Dernier message: 08/01/2009, 09h22
  2. quel type de donnée pour un champs de ma table ?
    Par nabians dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/08/2007, 21h33
  3. quel type de donnée choisir pour simuler le type Currency
    Par maamar1979 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2007, 12h44
  4. quel type de donné renvoie un socket
    Par sneb5757 dans le forum Développement
    Réponses: 4
    Dernier message: 18/11/2006, 18h06
  5. Champ PRIX : quel type de donnée ?
    Par Ant8386 dans le forum Oracle
    Réponses: 3
    Dernier message: 28/06/2006, 16h05

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