2010-11-17 5 views
2

Wenn ich die Methode ausführen: dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map); bekomme ich folgende Fehlermeldung:Erstellen von Abfragen mit JPQL - Abfragesyntax 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]

Es folgt die Abfrage Methode Implemenation; Wer sieht was falsch ist?

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

Was versuchen Sie zu erreichen? Dieser Code sieht jetzt völlig bedeutungslos aus. – axtavt

+0

@axtavt: Ich versuche Profile auszuwählen, die eine bestimmte Gruppen-ID haben, und ich möchte die Profile nach ihrem Datumsstempel in 'DESC' oder' ASC' sortieren, je nach dem Parameter ': key'. – AMS12

Antwort

0

Ich glaube, Sie müssen ein Komma nach ORDER BY p.datestamp und vor :key

+0

Danke für den Vorschlag, aber es funktioniert nicht ganz. Im Wesentlichen versuche ich dies zu erreichen: 'SELECT p FROM Profil p WHERE p.gruppe =: id ORDER BY p.datestamp [ASC | DESC]' wobei die Reihenfolge durch den Parameter ': key' bestimmt wird. – AMS12

4

können Sie keine Parameter Richtung festlegen, Sortierung, weil Parameter nicht an beliebigen Stellen der Abfrage verwendet werden kann. Von JPA-Spezifikation:

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

Also, in JPA 1.0 müssen Sie Query-String mit entsprechender ORDER Klausel manuell erstellen.

In JPA 2.0 können Sie mithilfe der Kriterien-API dynamische Abfragen erstellen.