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

Autres Java Discussion :

Hibernate HQL : CASE WHEN THEN


Sujet :

Autres Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Hibernate HQL : CASE WHEN THEN
    Bonjour,

    Je tente depuis deux jours maintenant de trouver une solution à mon problème mais en vain : je veux utiliser la clause case when then dans une requête HQL (hibernate 3.2.x) qui calcule le montant total d'écritures selon un sens. Le montant étant tjrs positif, le sens permet de savoir si lors de la somme il faut ajouter ou soustraire (d'où le besoin du case when then)

    Requête HQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT COUNT(asEcriture), SUM(asEcriture.montant * 
    (CASE WHEN asEcriture.sens = 'CREDIT' THEN 1 ELSE -1 END)
    ) 
    FROM Ecriture asEcriture
    JOIN FETCH Compte asCompte
    WHERE asCompte.id = :pIdCompte
    GROUP BY asCompte.id
    Lors de l'appel il n'y aucune erreur de syntaxe et la requête retourne null. Pourtant, j'ai bien un enregistrement qui devrait être retourné. La preuve est que si je modifie la requête en supprimant seulement la partie * et le case et que j'exécute, la requête me retourne bien l'enregistrement voulu (sous forme d'un tableau à deux éléments).

    Alors je me demande si le case est bien pris en compte et si tel n'est pas le cas pourquoi je n'ai pas d'erreur de syntaxe ?

    Merci

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    La doc décrit le case when pour la clause where mais pas pour la clause select.
    Je crains que ce ne soit pas possible.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta réponse.

    Qu'entend tu par pas possible ? Parce que si c'était le cas j'imagine que j'aurais une erreur de syntaxe !

    Sinon, ton lien par très brièvement du case (d'ailleurs aucune explication mais plutôt une citation)

    J'ai lu sur d'autres forums que c'était possible avec la version actuelle et d'ailleurs j'ai fait un test simple et ça marche mais quand c'est des cas complexes le résultat est erroné (mais pas de crash) !

    Je continue à creuser et encore une fois merci.

  4. #4
    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
    affichez votre requete SQL générée par hibernate, ça vous donnera une idée du problème.

Discussions similaires

  1. SUM(CASE WHEN THEN 1 ELSE 0 END) SUR PLUSIEURS LIGNES
    Par Dr_No dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/11/2012, 14h35
  2. problème case when then jpql
    Par hadmarin dans le forum Persistance des données
    Réponses: 0
    Dernier message: 08/09/2011, 10h31
  3. CASE WHEN avec hibernate
    Par kinshinori dans le forum Hibernate
    Réponses: 0
    Dernier message: 11/06/2010, 10h54
  4. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23
  5. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58

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