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 :

Problème avec un LIMIT


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 46
    Points
    46
    Par défaut Problème avec un LIMIT
    Bonjour à tous.

    Voila j'ai une requête assez simple, qui utilise un LIMIT, mais à l'exécution, voila l'erreur qu'il me renvoit :

    8-07 20:43:00,068 ERROR [cessor23] "Servlet.service()" pour la servlet admin a lancé une exception @[/webclient].[admin]:704
    org.hibernate.hql.ast.QuerySyntaxException: unexpected token: LIMIT near line 8, column 31 [SELECT ps
    FROM com.orange.openfoundation.server.beans.ProfileStyle ps, com.orange.openfoundation.server.beans.OpenMusicProfile op, com.orange.openfoundation.server.beans.Openmusicspace os
    WHERE ps.omOpenMusicProfile.openMusicProfilId = op.openMusicProfilId
    AND op.ofIdentity.identityId = os.ownerId
    AND os.blocked = false
    AND op.omProfileType.profileTypeId = rofileTypeId
    AND ps.profileStyleItemId = rofileStyleItemId
    order by ps.openMusicProfilId LIMIT 0,25]
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:24)
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)



    Voilà mon code java DAO qui prépare la requête :

    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
    StringBuffer lQuery = new StringBuffer();
     
    		lQuery.append("SELECT ps \n");
    		lQuery.append("FROM ProfileStyle ps, OpenMusicProfile op, Openmusicspace os \n");
    		lQuery.append("WHERE ps.omOpenMusicProfile.openMusicProfilId = op.openMusicProfilId \n");
    		lQuery.append("AND op.ofIdentity.identityId = os.ownerId \n");
    		lQuery.append("AND os.blocked = false \n");
    		lQuery.append("AND op.omProfileType.profileTypeId = :ProfileTypeId \n");
    		lQuery.append("AND ps.profileStyleItemId = :ProfileStyleItemId \n");
    		lQuery.append("order by ps.openMusicProfilId");
    		lQuery.append(" LIMIT "+ start +","+ number);
     
    		Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    		Query hql = session.createQuery(lQuery.toString());
    		hql.setLong("ProfileTypeId", profileTypeId.longValue());
    		hql.setLong("ProfileStyleItemId", profileStyle.getProfileStyleItemId().longValue());
     
    		return hql.list();
    Je pense que c'est un truc tout bête, mais la je ne comprend pas, surtout que je l'ai utilisé ailleurs sans problème...

    SVP help me !

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 71
    Points
    71
    Par défaut
    perso je vois pas ou est le problème, mais tu as un /n que tu n'as pas mis... la ligne juste avant le limit. Peut-être est-ça... Sinon a quoi te sers ces /n ? :s

    Edit:

    De plus ne faut-il pas que tu des ' ' avant pour encadré la variable start, et l'autre?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Je ne sais pas si le HQL supporte la clause LIMIT mais la façon recommandée est d'utiliser Query.setFirstResult() et Query.setMaxResults()

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par breezer911
    perso je vois pas ou est le problème, mais tu as un /n que tu n'as pas mis... la ligne juste avant le limit. Peut-être est-ça...
    Nan essayé, négatif

    Citation Envoyé par breezer911
    Sinon a quoi te sers ces /n ? :s
    A rien lol ... Je précise que c'est un code qu'a déjà été fait et que je modifie...


    Citation Envoyé par breezer911
    De plus ne faut-il pas que tu des ' ' avant pour encadré la variable start, et l'autre?
    Bah en fait j'ai fait un copier coller de la clause LIMIT, qui a exactement la même tête dans une autre requête, qui marche elle...

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    L'opérateur LIMIT n'existe pas en HQL...

    C'est un opérateur qui n'existe quasiment que dans le SQL de MySQL.
    Hibernate étant voué à travailler avec plusieurs SGBD, l'intégration de mot clef LIMIT n'entre pas dans la spec (ce qui est tout à fait normal).

    Par contre tu peuyx utiliser la méthode setMaxResults sur ta query pour limiter le nombre de résultats

    ++

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Bon je vais essayer avec ca alors...

    apparement les méthodes Query.setFirstResult() et Query.setMaxResults() permettent de donner un point de départ et un nb de resultats ??

    En clair c'est l'équivalent hibernate pour LIMIT...

    Mais alors ca n'explique pas pk ca marche dans d'autres cas... .


    Merci de votre aide en tout cas

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Et bien ca marche !!!

    C'est cool votre truc !! Merci énormément !!

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

Discussions similaires

  1. [Débutant] Problème avec les limites des axes x et y
    Par alexov dans le forum MATLAB
    Réponses: 4
    Dernier message: 18/05/2011, 17h27
  2. [XL-2003] Problème avec la limitation dans la minimisation par "Solver" Excel 2003
    Par snsr2007 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/06/2010, 11h16
  3. Problème avec un LIMIT
    Par mikadom dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 14/10/2008, 13h41
  4. [VBA-E] Encore un problème avec les limites de RANGE
    Par durdesfois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2007, 19h56
  5. [HSQLDB] problème avec un SELECT utilisant LIMIT
    Par don_quichotte dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 12/04/2007, 23h08

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