我是hibernate的新手,并试图在hibernate中运行查询,但我得到的例外是
unexpected token: ON near line 1, column 135 [SELECT A.comp_id.appRefNo ....
这是代码
StringBuffer query = new StringBuffer("SELECT A.comp_id.appRefNo,
A.comp_id.custId from ");
query.append(LosaCustContactZ.class.getName());
query.append(" A INNER JOIN " + LosaCust.class.getName() + " B
ON ( B.comp_id.appRefNo = A.comp_id.appRefNo AND " +
"B.comp_id.custId = A.comp_id.custId) INNER JOIN " + LosaApp.class.getName() + " C
ON " + "(B.comp_id.appRefNo = A.comp_id.appRefNo) ");
query.append("WHERE C.comp_id.appRefNo != ?" + " AND C.appDt >= ? AND
A.contactT = 'PHONE'" );
if (StringUtils.isNotEmpty(phoneNums)) {
query.append(" AND A.contact IN(" + phoneNums + ")");
}
List<LosaCustContactZ> resultList = null;
try {
resultList = getHibernateTemplate().find(query.toString(),
new Object[] { appRefNo, appDate });
} catch (Exception e) {
String message = e.getMessage();
System.out.println();
}
return resultList;
我做错了什么?
由于
答案 0 :(得分:8)
SQL中的许多构造都无法一对一地移动到HQL。在HQL中,当使用特定条件加入时,使用关键字WITH
代替ON
。此构造特定于Hibernate,并且不期望与其他JPA提供程序一起使用。
答案 1 :(得分:3)
答案 2 :(得分:0)
在更正表/列名称后尝试以下代码:
public static List<Object[]> getTopRequests(int start, int end)
throws Exception {
List<Object[]> list = null;
Session session = null;
try {
session = HibernateUtil.openSession();
session.beginTransaction();
Query q = session.createQuery("SELECT "
+ " tr.id as id, "
+ // Column 0
" tr.amount as amount,"
+ // Column 1
" tcp.phoneNum as phoneNum, "
+ // Column 2
" trs.faTitle as faTitle, "
+ // Column 3
" tr.createDate as createDate "
+ // Column 4
" FROM TopRequest as tr " + " , TopCellPhone as tcp "
+ ", TopRequestState as trs "
+ " WHERE tcp.tcpId = tr.tcpId "
+ " AND tr.trsId = trs.trsId "
+ " ORDER BY tr.updateDate DESC");
q.setFirstResult(start);
q.setMaxResults(end - start);
list = (List<Object[]>) q.list();
session.getTransaction().commit();
} catch (Exception e) {
_log.error(e.getMessage(), e);
} finally {
HibernateUtil.closeSession(session);
return list;
}
}