日期:2014-05-19  浏览次数:20718 次

hibernate根据条件查询的问题
本帖最后由 mutou269874721 于 2010-10-15 17:43:54 编辑 项目用的是SSH框架。。现在做到一个根据两个条件查询数据库的问题。不知道数据库语句该怎么写了。
请大家指教一下。。

public List<Restaurant> getListSerach(String add, String rType,
int pageSize, int pageNo) {
Session session=super.getSession();
String hql="from Restaurant res where res.foodAddress like %?% and res.foodType like %?% order by newid()";
Query query=session.createQuery(hql);
query.setString(0, add);
query.setString(1, rType);
List<Restaurant> list=query.list();
return list;
}


下面的是分页的统计总数代码:

public int getTotalSerach(String add, String rType) {
Session session=super.getSession();
String hql="select count(res.id) from Restaurant res where res.foodAddress like %"+'?'+"% and res.foodType like %"+'?'+"% ";
Query query=session.createQuery(hql);
query.setString(0, rType);
Long record=(Long) query.uniqueResult();
return record.intValue();
}



再把自己action的代码贴出来


public ActionForward getListSerach(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
int pageSize=8; 
int pageNo=Integer.parseInt(request.getParameter("reqPage"));
String add=new String(request.getParameter("add").getBytes("ISO-8859-1"),"UTF-8");
String rType=new String(request.getParameter("rType").getBytes("ISO-8859-1"),"UTF-8");
List<Restaurant> list=resBiz.getListSerach(add, rType, pageSize, pageNo);
int record=resBiz.getTotalSerach(add, rType);
request.setAttribute("add", add);
request.setAttribute("rType", rType);
request.setAttribute("list", list);
request.setAttribute("currentPage", pageNo);
request.setAttribute("pageSize", pageSize);
request.setAttribute("maxPage", record % pageSize == 0 ? 
record/ pageSize : (record / pageSize + 1));
return mapping.findForward("viewResList");
}


上面两个的hql语句都是错的。。请大家指教一下


用模糊查询的时候,这个用法应该是怎样的呢??

------最佳解决方案--------------------
like ? and res.foodType like ? 
 query.setString(0, "%"+add+"%");
   

------其他解决方案--------------------
那就是因为你条件不满足导致没有结果的啊
------其他解决方案--------------------
like :a and res.foodType like :b 
query.setParameter("a", "%"+add+"%");

------其他解决方案--------------------
引用:
like :a and res.foodType like :b 
query.setParameter("a", "%"+add+"%");


你好,很感谢你的帮助,语句能正常执行了
但是不能取得结果
下面的是我打印的hql语句和取值list与record:
Hibernate: select restaurant0_.id as id3_, restaurant0_.foodTitle as foodTitle3_, restaurant0_.foodIntroduce as foodIntr3_3_, restaurant0_.foodAddress as foodAddr4_3_, restaurant0_.foodGroup as foodGroup3_, restaurant0_.foodType as foodType3_