2010-11-17 2 views
2

を:dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map);私は次のエラーを取得する:クエリーメソッドのimplemenationが続き作成クエリ - 私はこの方法を実行すると、クエリ構文の例外

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]

を。誰が何が間違っているのを見ますか

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

あなたは達成しようとしていますか?このコードは今は全く意味がないように見えます。 – axtavt

+0

@axtavt:特定のグループIDを持つプロファイルを選択しようとしています。プロファイルを ':key'パラメータに応じて' DESC'または 'ASC'で日付スタンプでソートしたいとします。 – AMS12

答えて

0

私はあなたがORDER BY p.datestamp後にカンマが必要だと思うし、パラメータは、クエリの任意の場所で使用することはできませんので:key

+0

提案していただきありがとうございますが、動作しません。基本的に、私はこれを達成しようとしています: 'SELECT p FROM Profile p WHERE p.group =:id ORDER BY p.datestamp [ASC | DESC]'ここで、順序は ':key'パラメータによって決まります。 – AMS12

4

前に、方向をソートを指定するためのパラメータを使用することはできません。 JPA仕様から:

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

だから、JPA 1.0に手動で適切なORDER句を指定したクエリ文字列を構築する必要があります。

JPA 2.0では、Criteria APIを使用して動的クエリを構築できます。

関連する問題