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

JPA Java Discussion :

Requête avec calcul de somme


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Par défaut Requête avec calcul de somme
    Bonjour

    je souhaite calculer la somme des détails d'une facture.

    voilà la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      public Integer findTotalFacture(String ref) throws Exception{
           Query query = em.createQuery("SELECT SUM(o.total) FROM Detailfacture o WHERE o.facture.reffact = :ref ");
           query.setParameter("ref", ref);
           Integer somme=(Integer) query.getSingleResult();
           return somme;
        }
    et voilà l'erreur qu'il s'affiche:

    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
    Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
    	at DAO.IDAO.findTotalFacture(IDAO.java:689)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5292)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139)
    	at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5264)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5252)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)

    comment résoudre ce problème!!!
    merci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Comment résoudre ce problème ? En lisant ce que mentionne l'exception tout simplement.

    java.lang.Long cannot be cast to java.lang.Integer
    Tu as une donnée de type Long que tu castes en Integer et ça Java n'aimera pas.

    Donc je suppose qu'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer somme=(Integer) query.getSingleResult();
    Ça serait plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Long somme = (Long) query.getSingleResult();
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre très actif
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Billets dans le blog
    1
    Par défaut
    salut
    pour résoudre ce problème de base il faut regarder la javadoc de java.lang.Long avec la méthode intValue() http://docs.oracle.com/javase/7/docs...tml#intValue()

    mais aussi la javadoc de entitymanager http://docs.oracle.com/javaee/6/api/...va.lang.Class)

    quand tu créé ta query donne lui le type de retour ici Long... et ensuite ton single result sera du type Long a partir duquel tu pourra faire directement un intValue() et au pire tu cast le single result en Long

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      public Integer findTotalFacture(String ref) throws Exception{
           return em.createQuery("SELECT SUM(o.total) FROM Detailfacture o WHERE o.facture.reffact = :ref ",Long.class)
           .setParameter("ref", ref)
           .getSingleResult()
           .intValue();
        }

  4. #4
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Par défaut
    bonjour;

    je veux affecter le résultat de la première requête à une autre champ dans la deuxième requête.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Double montant= em.createQuery("SELECT SUM(o.total) FROM Detailfacture o WHERE o.facture.reffact = :ref",Double.class).setParameter("ref", ref).getSingleResult().doubleValue();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           Facture facture = null;
           Query query=em.createQuery("UPDATE Facture e SET e.montantHT = :montant WHERE e.reffact = :ref");
           int updateCount = query.setParameter("ref", ref).executeUpdate();
           return facture;

    le message d'erreur qu'il s'affiche est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.IllegalStateException: Query argument montant not found in the list of parameters provided during query execution.
    svp,comment résoudre ce problème!

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Comme l'erreur précédente, en lisant l'exception et en se renseignant un minimum.

    Caused by: java.lang.IllegalStateException: Query argument montant not found in the list of parameters provided during query execution.
    Donc l'attribut "montant" n'a pas été ajouté au sein de la Query (cf. ici).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

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

Discussions similaires

  1. requête qui calcules les sommes
    Par bingo06260 dans le forum Débuter
    Réponses: 3
    Dernier message: 17/11/2011, 09h27
  2. Retranscrire une Requête avec calcul en VBA
    Par xargin dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/09/2011, 09h33
  3. [Doctrine] requête pour calculer une somme
    Par flora806 dans le forum ORM
    Réponses: 26
    Dernier message: 23/03/2011, 11h38
  4. [AC-2007] Requête avec calcul
    Par Prisss dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/06/2010, 16h20
  5. requête avec calcul d'un cumul
    Par kikidrome dans le forum Langage SQL
    Réponses: 16
    Dernier message: 21/03/2008, 10h13

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