因为要做一个分页的功能,所以就上网随便找了一个hibernate分页的实例,但是总是报出:
org.hibernate.QueryParameterException: could not locate named parameter这个恼人的错误,却又查不到到底是那里错了。
仔细想一想,错误提示是因为我的参数没有设置,就是我没有那个参数,但是我却给它赋值了。
因为一般我们都用 query.setParameter(arg0, arg1)给hql语句添加参数。那么为什么不自己写一个完整的SQL语句直接调用
Query query =session.createQuery(hql);
下面是整个代码:
注:Employee是一个实体类型
pageNo是页码
pageSize是分页大小
hql="from "+实体名
Map装的是实体对应的属性和属性对应的值
为了不花费功夫处理开头和结尾的where和and 问题,我添加了两个永真的表达式1=1 ,2=2
简单说当传入的map为空时,那么hql=“from Employee where 1=1 and 2=2”;
注意空格问题
public List<Employee> findPageByQuery(int pageNo, int pageSize, String hql, Map<String,Object> map)
{
List<Employee> result = null;
try
{
hql+=" where 1=1 and ";
Session session=HibernateSessionFactory.getSession();
if(!map.isEmpty())
{
Iterator<String> it=map.keySet().iterator();
while(it.hasNext())
{
String key=it.next();
hql=hql+key+" like "+"'%"+map.get(key)+"%'"+" and ";
}//where stationName like '%"+stname+"%'"
}
hql+=" 2=2";
System.out.println(hql);
Query query =session.createQuery(hql);
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
result = query.list();
} catch (RuntimeException re)
{
throw re;
}
return result;
}
希望你能直接用的上!!