2012-09-27 14 views
5

のエラーが発生しました。すべての名前付きパラメータがに設定されていません。以下は私のコードです。 MySQLのプロンプトで罰金を実行しているすべての名前付きパラメータがcreateSQLQueryで休止状態に設定されていません

私のSQLQueryは、あなたが質問SQL Query

SELECT t.* 
FROM (
    SELECT @lim := 2, 
      @cg := '' 
    ) vars, 
    (select * from Table1 order by product,amount, make) t 
WHERE CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0 
    AND (@r := @r - 1) >= 0 
    AND (@cg := product) IS NOT NULL 
ORDER BY 
    product,amount, make 

でスキーマを参照することができ、私のJavaコードの下

try { 
      context.dbl.startTransaction(); 
      Session session = context.dbl.getSession(); 

      //String sqlQuery = "from com.infibeam.inventoryservice.dbObjects.PopularBrandDO"; 
      String sqlQuery = "SELECT t.* "; 
      sqlQuery=sqlQuery + "FROM ("; 
      sqlQuery=sqlQuery + "SELECT @lim := 2,"; 
      sqlQuery=sqlQuery + "@cg := ''"; 
      sqlQuery=sqlQuery + ") vars, "; 
      sqlQuery=sqlQuery + "(select * from Table1 order by product,amount, make) t"; 
      sqlQuery=sqlQuery + " WHERE CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0"; 
      sqlQuery=sqlQuery + " AND (@r := @r - 1) >= 0 "; 
      sqlQuery=sqlQuery + " AND (@cg := product) IS NOT NULL "; 
      sqlQuery=sqlQuery + " ORDER BY product,amount, make"; 
      //Query query = session.createQuery(sqlQuery); 
      SQLQuery query = session.createSQLQuery(sqlQuery); 
      listItems = query.list(); 


      }catch(RuntimeException e) { 
       e.printStackTrace(); 
      } 

は私が

org.hibernate.QueryException: Not all named parameters have been set: [] [SELECT t.* FROM (SELECT @lim := 2,@cg := '') vars, (select * from Table1 order by product,amount, make) t WHERE CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0 AND (@r := @r - 1) >= 0 AND (@cg := product) IS NOT NULL ORDER BY product,amount, make] 
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:291) 
    at org.hibernate.impl.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:199) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:143) 
    at com.infibeam.weaverbird.helper.PopularBrandFacetHelper.bootstrap(PopularBrandFacetHelper.java:48) 
を取得しています例外で

ありがとうございました...

答えて

13

問題は、:=の割り当てですが、標準SQLはありません。

:の後のSQLでは、常にwhere value = :paramのようなパラメータが必要であり、:paramはパラメータとして設定されています。現在、休止状態は、選択パラメータをスキャンして、設定パラメータがない場合にコロンを検索します。

解決方法:休止状態を使用して選択内容を再設計してください。

2つの異なるHQLクエリを使用できます。

まず:すべての製品を選択:select distinct product from Table1

第二:各製品について、あなたはfrom Table1 where product = :prodを行い、:PRODあなたは実際の製品とのパラメータとして設定、およびはsetMaxResultsと(2)あなたのように行数を制限することができますあなたが必要です。

多くの選択肢がありますが、単一の問合せよりも高速ですが(単一の問合せは複雑で、データベース内の非効率な検索方法のリスクがあります)。大きな利点は、今は純粋にHQLなので、あなたのプログラムは異なるデータベースに移植可能です。

関連する問題