HQL内连接查询,去重
来源:互联网 发布:网络教育专升本统考 编辑:程序博客网 时间:2024/06/05 06:53
因为查询条件需要对 连接的表中的两个字段 or 条件查询
导致查询出来的记录,有重复
一.
使用 group by 主键(用这种可以 再 SELECT COUNT(*) 进行分页,记录数的统计)
@Overridepublic List<Remotecertapplyorder> getOrderList(int userid, String username,Date[] createDates){RemotecertapplyorderDao remotecertapplyorderDao =(RemotecertapplyorderDao) dao;List<Date> dateValues = new ArrayList<Date>();//StringBuffer hql=new StringBuffer("select distinct ro from Remotecertapplyorder ro left join fetch ro.remotecertapplies r where 1=1 ");StringBuffer hql=new StringBuffer("select ro from Remotecertapplyorder ro inner join ro.remotecertapplies r where 1=1 ");hql.append(" and ro.applicant.id = "+userid);if(StringUtils.hasText(username)){hql.append(" and ( r.username like '%"+username+"%' or r.invoicename like '%"+username+"%') ");}if(createDates[0]!=null){hql.append(" and ro.createtime >= ? ");dateValues.add(createDates[0]);}if(createDates[1]!=null){hql.append(" and ro.createtime <= ? ");dateValues.add(createDates[1]);}hql.append(" group by ro.id order by ro.id ");List<Remotecertapplyorder> remotecertapplyorders =(List<Remotecertapplyorder>) remotecertapplyorderDao.find(hql.toString(), dateValues.toArray());return remotecertapplyorders;}
上面查询的count 与实际得到的 list 结果不一致 需要采用子查询
-----》
@Overridepublic List<Remotecertapplyorder> getOrderList(int userid, String username,Date[] createDates){RemotecertapplyorderDao remotecertapplyorderDao =(RemotecertapplyorderDao) dao;List<Date> dateValues = new ArrayList<Date>();StringBuffer hql=new StringBuffer("from Remotecertapplyorder where id in (select ro.id from Remotecertapplyorder ro left join ro.remotecertapplies r where 1=1 ");hql.append(" and ro.applicant.id = "+userid);if(StringUtils.hasText(username)){hql.append(" and ( r.username like '%"+username+"%' or r.invoicename like '%"+username+"%') ");}if(createDates[0]!=null){hql.append(" and ro.createtime >= ? ");dateValues.add(createDates[0]);}if(createDates[1]!=null){hql.append(" and ro.createtime <= ? ");dateValues.add(createDates[1]);}hql.append(" group by ro.id ) order by id ");List<Remotecertapplyorder> remotecertapplyorders =(List<Remotecertapplyorder>) remotecertapplyorderDao.find(hql.toString(), dateValues.toArray());return remotecertapplyorders;}
这样 count 与 得到的实际值相同
二.
使用 distinct
public PaginationSupport<Remotecertapplyorder> getorderList(int userid, //动态查询加分页String username, Date beginTime, Date endTime,Integer pagesize, Integer currpageno){RemotecertapplyorderDao remotecertapplyorderDao=(RemotecertapplyorderDao) dao;PaginationSupport<Remotecertapplyorder> result=new PaginationSupport<Remotecertapplyorder>();if(currpageno>0)result.setCurrPageNo(currpageno);if(pagesize>0)result.setPageSize(pagesize);StringBuffer hql=new StringBuffer("select distinct ro from Remotecertapplyorder ro left join fetch ro.remotecertapplies r "+ "where ro.applicant.id = "+userid );if(username!=null && username.length()>0)hql.append(" and ( r.username like '%"+username+"%' or r.invoicename like '%"+username+"%')");if(beginTime!=null)hql.append(" and ro.createtime >= '"+beginTime+"' ");if(endTime!=null)hql.append(" and ro.createtime <= '"+endTime+"' ");hql.append(" order by ro.id ");int count=remotecertapplyorderDao.getCount(hql.toString());result.setTotalCount(count);if(count!=0){if(result.getTotalPageCount()<currpageno){currpageno = result.getTotalPageCount();result.setCurrPageNo(currpageno);}List<Remotecertapplyorder> list=remotecertapplyorderDao.orderByPage(hql.toString(),result.getPageSize(),result.getCurrPageNo());result.setItems(list);}return result;}
阅读全文
0 0
- HQL内连接查询,去重
- Hibernate Hql 去重查询 表中多个重复数据去重
- HQL内连接查询返回的数组集合分析
- HQL (九) 连接查询
- HQL 连接查询
- HQL连接查询
- HQL连接查询【重要】
- Hql连接查询
- HQL内连接语句实测
- sql 查询去重
- mysql去重查询
- sql去重查询
- 查询去重
- 查询去重问题
- elasticsearch查询去重
- sql查询去重
- elasticsearch查询去重
- mysql | 去重查询
- select for update和select for update wait和select for update nowait的区别
- linux 内核空间 及 高端内存详解
- wildcard函数
- synchronized的使用方法
- 六种难以启齿的真实离职原因,应该这样说
- HQL内连接查询,去重
- NOSQL之旅---HBase
- 收藏的资源
- 献上bmp280驱动代码(spi接口)
- Play Freamwork框架简介
- 安装lnmp环境
- hibernate(配置文件)入门实例
- jquery ztree树
- android 虚拟运营商忽略国内漫游