0

私は休止状態が初めてで、クエリがあります

 select * from Losa_App a
 inner join 
     os_historystep os
 on
     a.app_ref_no = os.ref_id
 where 
     os.step_name = '011' and app_status = 'R' or  app_status = 'S' ;

このクエリを sqldeveloper で実行すると、実行されて結果が得られます。今、私はクエリをHBLのように翻訳しました

StringBuffer query = new StringBuffer();
    List<String> lstObj = new ArrayList<String>();
    query.append(" from ");
    query.append(getClassName());
    query.append(" a inner join "
            // + WflWorkflowHistoryStep.class.getName()
            + " OS_HISTORYSTEP os with a.appRefNo = os.ref_id "
            + "where os.step_name = '011' and a.appStatus = 'R' or a.appStatus = 'S'  ");

    List<LosaApp> result = null;

    try {

        result = getHibernateTemplate().find(query.toString());
        if (CollectionUtils.isNotEmpty(result) {
            return result;
        }

    } catch (Exception e) {

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

    }

    return null;

しかし、このクエリを実行すると、例外が発生します

nested exception is org.hibernate.hql.ast.QuerySyntaxException: Path expected for
join! [ from com.thetasp.losa.data.LosaApp a inner join  OS_HISTORYSTEP os with
a.appRefNo = os.ref_id where os.step_name = '011' and a.appStatus = 'R'
or a.appStatus = 'S'  ]

なぜこのエラーが発生するのですか?

ありがとう

4

1 に答える 1

0

HQL構文が間違っています。

  1. キーワードを使用してエイリアスを指定する必要がありますas。例:-Losa_Appとして
  2. を指定し、関連付けのマッピングを行っている場合は、句を指定inner joinする必要はありません。on
  3. を与える場合はa.app_ref_no = os.ref_id、を指定する必要はありませんinner join。Hibernateがそれを処理します。

詳細については、この質問をご覧ください。

于 2013-03-14T07:27:47.183 に答える