0

Hibernateでサブクエリを実行しようとしていますが、

nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: 
where near line 1, column 183

まずここでSQLのクエリ

select * 
from OS_Historystep hs1
where step_name = '011' 
and finish_date = (select max(finish_date) 
                      from OS_Historystep hs2 
                      where hs2.step_name = hs1.step_name
                      and hs2.ref_id = hs1.ref_id);

なぜこのエラーが発生するのですか?これが私の休止状態のクエリです

StringBuffer query2 = new StringBuffer();
    query2.append(" from ");
    query2.append(WflWorkflowHistoryStep.class.getName());
    query2.append(" hs1 where hs1.stepName = " + workFlowStepName);
    query2.append(" and hs1.finishDate = (select max(hs2.finishDate) from "
            + WflWorkflowHistoryStep.class.getName() + " hs2 )");
    query2.append("where hs2.stepName = hs1.stepName and hs2.refId = hs1.refId");

    try {

        historyStepList = getHibernateTemplate().find(query2.toString());

    } catch (Exception e) {

        String message = e.getMessage();
        System.out.println();

    }

ありがとう

4

1 に答える 1

0

このようにクエリを書き出す場合:

 from WflWorkflowHistoryStep hs1 
where hs1.stepName = ?
  and hs1.finishDate=(select max(hs2.finishDate) from WflWorkflowHistoryStep hs2)
                                                                                ^
where hs2.stepName = hs1.stepName and hs2.refId = hs1.refId
^^^^^

2つのwhere句があることがわかります。おそらくブラケットを別の場所に置くつもりだったと思います。

また、文字列を連結する代わりにパラメーター(?)を使用します。そうしないと、HQLインジェクション攻撃にさらされることになります。

于 2013-03-15T12:50:12.870 に答える