I am new to hibernate and trying to run query in hibernate but i am getting the exception that
unexpected token: ON near line 1, column 135 [SELECT A.comp_id.appRefNo ....
Here is the code
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;
what i am doing wrong ?
Thanks
Seems like there is a mapping association missed in your hbm.xml.
Please refer this.
No defined association in hbm.xml file
Many constructs from SQL cannot moved one-to-one to the HQL. In HQL keyword WITH
is used instead of ON
, when joining with specific condition. This construct is specific to Hibernate and is not expected to work with other JPA providers.
Chapter about HQL and especially 16.3 Associations and Joins in Hibernate Core Reference Manual are worth of reading.
Try the following code after correcting tables/columns names:
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;
}
}