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 回答