Hibernate框架中criterion的使用

来源:互联网 发布:软件项目管理 考试 编辑:程序博客网 时间:2024/05/22 01:55

criterion单表查询的时候比价简单,当基于多张表查询时,具体做法如下:

<p>   Criteria criteria=s.createCriteria(TProduct_CBean.class);//条件查询的主表   Criteria mapcriteria=criteria.createCriteria("mapResources",Criteria.LEFT_JOIN);//条件查询的子表mapResources   Criteria sicriteria=criteria.createCriteria("si");//条件查询的子表si</p><p>   //添加主表的查询条件   if(map.get("createtime_begin")!=null && !(map.get("createtime_begin").equals("")))   {    criteria.add(Restrictions.ge("createtime",map.get("createtime_begin")));   }   if(map.get("createtime_end")!=null && !(map.get("createtime_end").equals("")))   {    criteria.add(Restrictions.ge("createtime",map.get("createtime_end")));   }   if(map.get("product_name")!=null && !(map.get("product_name").equals("")))   {    criteria.add(Restrictions.ge("createtime",map.get("product_name")));   }   if(map.get("statusid")!=null && !(map.get("statusid").equals("")))   {    criteria.add(Restrictions.eq("statusid",map.get("statusid")));   }</p><p>   //添加si子表的查询条件   if(map.get("siid")!=null && !(map.get("siid").equals("")))   {    sicriteria.add(Restrictions.eq("id",map.get("siid")));   }</p><p>   //添加mapresources子表的查询条件   if(map.get("mapid")!=null && !(map.get("mapid").equals("")) )   {    mapcriteria.add(Restrictions.eq("id",map.get("mapid")));   }</p><p>   //单条记录的查询,   int count= ((Integer) criteria.setProjection(Projections.rowCount())                    .uniqueResult()).intValue();            criteria.setProjection(null);</p><p>   pageResult.setTotalRecord(count);   pageResult.getTotalPage();    if (pageResult.getCurrent() > pageResult.getTotalPage()) {    pageResult.setCurrent(pageResult.getTotalPage());   }     int start = (pageResult.getCurrent() - 1) * pageResult.getPageSize();     int size = pageResult.getPageSize();   criteria.setFirstResult(start);;   criteria.setMaxResults(size);</p><p>   //多条记录结果集的查询   List list = criteria.list();   List proList = new ArrayList();   if(list.size()>0){    for(int i=0;i<list.size();i++){     Object[]  objs=(Object[])list.get(i);     //System.out.println("==================="+objs[2]);     TProduct_CBean t=(TProduct_CBean)objs[2];     proList.add(t);    }   }   pageResult.setList(proList);</p>


由于product和mapresources之间存在多对多关系,所以上面查询出来的结果是2张表记录的乘积,但由于项目显示不需要乘积,所以后来改成了hibernate的sql查询的方式,在这把这记录一下,以作日后参考。

 

原创粉丝点击