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 :

[EJBQL] Renommer un count


Sujet :

JPA Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Par défaut
    Bonjour a tous,

    dans mon projet j'utilise les ejbs et ejbql.

    J'ai une requête ejbql où je fais un count. J'ai besoin de renommer ce count mais je suis bloqué :

    Ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT m, count(c.id) 
    FROM Messages m, 
    Conflicts c LEFT OUTER JOIN c.messageId msg 
    GROUP BY m.parentId, m
    Le problème est que lorsque je rajoute "as myCount" après le count je récupere l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Exception [TOPLINK-8024] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EJBQLException
    Exception Description: Syntax error parsing the query [Messages.findAllDiscussions2: SELECT m, count(c.id) as abuses FROM Messages m, Conflicts c LEFT OUTER JOIN c.messageId msg GROUP BY m.parentId, m], line 1, column 23: syntax error at [as].
    Internal Exception: line 1:23: expecting "from", found 'as'
    Autrement dit, je voudrais faire simplement faire correspondre mon count(c.id) à un attribut de ma classe Messages.

    Existe-t-il une solution ?

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Essaie d'éviter de mettre le as, je crois qu'en EJBQL t'es pas obligé.
    Sinon es tu obligé de mettre un alias? tu peux recuperer simplement une collection d'Objects, et dans ta boucle, connaissant les vrais types tu castes,non?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Par défaut
    Je me réexplique :

    En clair j'ai mon objet Messages avec ses attributs qui correspondent chacun à une colonne de ma table Messages.

    Maintenant, j'ai rajouté un attribut à Messages, nommé "abuses", de type int dans lequel j'aimerai stocker un count.

    J'ai essayé pas mal de choses mais je n'y arrive pas. Le problème étant que ma colonne est nommé "count(c.id)".

    Comment puis-je récupérer une simple liste d'Object ? A ce moment là, comment se passe le cast ?

    Merci beaucoup pour ta réponse !

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Fais moi voir la boucle dans laquelle tu recuperes et traites le resultat de ta requete, et je t'aiderai à caster.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Par défaut
    Il n'y a pas de boucle, c'est un EntityManager qui récupère le résultat de ma NamedQuery.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Oui je connais le principe de soumission de la requête, mais comment la récupères tu de ton em? tu fais bien un select. je veux le bout de code qui devait traiter le résultat de ce select, la question n'est pourtant pas compliquée.
    Je partirai de là pour t'effectuer le cast qu'il faut, c vraiment pas compliqué du tout tu verras.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Par défaut
    J'ai juste ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public List<Messages> findAllDiscussions(){
        Query q = this.em.createNamedQuery("Messages.findAllDiscussion");
        return q.getResultList();
    }
    Je ne cast pas mon résultat :s

    Sinon montre moi, toi, comment tu fais et je vais voir pour adapter ça à mon cas. Je n'ai pas le code sous les yeux, je ne l'aurai que demain.

    Merci de ton aide !

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    C'est pas bon ta reception du resultat, tu attends une collection de 2 colonnes, la premiere de type Message, et la 2ieme un entier :, or dans la reception tu prevois juste une collection de Messages, ca peut pas marcher.Essais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Collection<Object[]> findAllDiscussions(){
        Query q = this.em.createNamedQuery("Messages.findAllDiscussion");
        return q.getResultList();
    Et dans le traitement tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Collection<Object[]> maListe= ton_objet_entity.findAllDiscussions();
    for (Object[] entry:maListe)
    {
    Message mgs = (Message) entry[0];
    Integer nb = (Integer) entry[1];
    ...
    }
    Bon courage.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Par défaut
    Ok, je vais essayer ça demain matin. En tout cas ça semble très cohérent .

    Je te remercie et je reviendrai poster le résultat.

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je suis arrivé ici en cherchant comment faire un LEFT OUTER JOIN en EJBQL.

    J'ai le même genre de truc à faire en un peu plus compliqué et faire le COUNT en java ne me plaît pas (les traitements de masse sur les données doivent être faits par le SGBD).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/07/2011, 13h03
  2. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35
  3. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Renommer un repertoire
    Par Sitas dans le forum Langage
    Réponses: 5
    Dernier message: 14/08/2002, 11h56

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