程序使用ssh整合框架,DAO实现层中的一个方法
/**
* 根据来电号码获取前三条表单信息
* @param billInfoTelephone 来电号码
* @return 前三条表单信息
*/
public List<BillInfo> getTopThreeBillInfos(String billInfoTelephone){
List<BillInfo> list = new ArrayList<BillInfo>();
SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
Session session = sessionFactory.openSession();
try{
if(billInfoTelephone!=null){
StringBuffer hql = new StringBuffer("");
hql.append("select top 3 * from BillInfo b where b.baseInfo.billInfoTelephone=:billInfoTelephone")
//按来电时间降序排列
.append(" order by b.baseInfo.answerTime desc");
Query query = session.createQuery(hql.toString());
query.setParameter("billInfoTelephone", billInfoTelephone);
list = query.list();
}
}catch(Exception e){
Log.warn(AddInfoDAOImpl.class +".getTopThreeBillInfos方法:"+e.getMessage());
}
session.close();
return list;
控制台错误:
2011-4-2 14:18:19 org.hibernate.hql.ast.ErrorCounter reportError
严重: line 1:12: unexpected token: 3
2011-4-2 14:18:19 org.hibernate.hql.ast.ErrorCounter reportError
严重: line 1:16: unexpected token: from
2011-4-2 14:18:19 org.hibernate.jdbc.util.SQLStatementLogger logStatement
修改为以下代码,问题解决,主要注意黄色部分。
/**
* 根据来电号码获取前三条表单信息
* @param billInfoTelephone 来电号码
* @return 前三条表单信息
*/
public List<BillInfo> getTopThreeBillInfos(String billInfoTelephone){
List<BillInfo> list = new ArrayList<BillInfo>();
SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
Session session = sessionFactory.openSession();
try{
if(billInfoTelephone!=null){
StringBuffer hql = new StringBuffer("");
hql.append("from BillInfo b where b.baseInfo.billInfoTelephone=:billInfoTelephone")
//按来电时间降序排列
.append(" order by b.baseInfo.answerTime desc");
Query query = session.createQuery(hql.toString());
query.setParameter("billInfoTelephone", billInfoTelephone);
list = query.list().subList(0, 2);
}
}catch(Exception e){
Log.warn(AddInfoDAOImpl.class +".getTopThreeBillInfos方法:"+e.getMessage());
}
session.close();
return list;
}
总结:hql中from关键字前不能有其他信息