2010-11-17 9 views
2

Quand je lance la méthode: dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map); je reçois l'erreur suivante:Création de requêtes à l'aide JPQL - Syntaxe de requête Exception

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : near line 1, column 93 [SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key]

Suite est la méthode de requête implemenation; Quelqu'un voit-il ce qui ne va pas?

public List<?> query(String criteria, HashMap<String, ?> args) { 
     Query sqlQuery = this.em.createQuery(criteria); 
     Set<String> keys = args.keySet(); 
     Iterator<String> iter = keys.iterator(); 
     while (iter.hasNext()) { 
      String key = iter.next(); 
      sqlQuery.setParameter(key, args.get(key)); 
     } 
     return sqlQuery.getResultList(); 
    } 
+0

Qu'essayez-vous d'accomplir? Ce code semble complètement dénué de sens maintenant. – axtavt

+0

@axtavt: J'essaie de sélectionner des profils qui ont un certain identifiant de groupe et je veux trier les profils par leur date, dans 'DESC' ou' ASC' en fonction du paramètre ': key'. – AMS12

Répondre

0

Je pense que vous avez besoin d'une virgule après ORDER BY p.datestamp et avant :key

+0

Merci pour la suggestion, mais cela ne fonctionne pas tout à fait. Essentiellement, j'essaie de réaliser ceci: 'SELECT p FROM Profil p WHERE p.group =: id ORDER BY p.datestamp [ASC | DESC]' où l'ordre est déterminé par le paramètre ': key'. – AMS12

4

Vous ne pouvez pas utiliser des paramètres pour indiquer la direction de tri, car le paramètre ne peut pas être utilisé dans des endroits arbitraires de la requête. Spec JPA:

Input parameters can only be used in the WHERE clause or HAVING clause of a query.

Ainsi, JPA 1.0 vous devez construire la chaîne de requête avec appropriée ORDER clause manuellement.

Dans JPA 2.0, vous pouvez utiliser l'API Criteria pour construire des requêtes dynamiques.