Getting error that unexpected token: ON near line

2019-04-10 00:03发布

问题:

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

回答1:

Seems like there is a mapping association missed in your hbm.xml.

Please refer this.

No defined association in hbm.xml file



回答2:

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.



回答3:

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;
    }
}


标签: hibernate hql