hibernate原生语句查询复合结果集代码举例

来源:互联网 发布:淘宝店铺首页广告词 编辑:程序博客网 时间:2024/05/22 23:50

项目目前使用hibernate,但是没有深入学习,之前对单表查询使用一直没有磕绊,今天碰到一个需求,需要对表进行sum,count,group操作。

习惯性用原生sql写,但是查询结果集时映射就不会了,网上查了半天,找到个文章:使用 JPQL 和原生 SQL 查询 JPA 实体(转)http://macrabbit.iteye.com/blog/855385介绍的比较到位,但是没有需要的代码示例,又查了下原生sql映射,最后代码如下:

(期间Integer类型转换遇到问题,参看:http://blog.csdn.net/u013762572/article/details/44185427)

String jpql = "SELECT uvCount.area,uvCount.phone, sum(times) as times,"

+ " sum(recommend_count) as recommend_count ,sum(register_count)as register_count "
+ " from xx_count uvCount WHERE uvCount.area like'%"+area+"%'";
if (endDate != null) {
jpql = jpql + " and uvCount.create_date <='"+DateTool.date2String(endDate)+"'";
}
jpql = jpql + " GROUP BY uvCount.phone";

List<Object[]> beanList = entityManager.createNativeQuery(jpql).setFlushMode(FlushModeType.COMMIT).getResultList();
List<UvCount> list = new ArrayList<UvCount>();
for (Object o[] : beanList) {
UvCount uv = new UvCount();
uv.setArea((String) o[0]);
uv.setPhone((String) o[1]);
if (o[2] != null) {
uv.setTimes(new Integer(String.valueOf(o[2])));
} else {
uv.setTimes(0);
}
if (o[3] != null) {
uv.setRecommendCount(new Integer(String.valueOf(o[3])));
} else {
uv.setRecommendCount(0);
}
if (o[4] != null) {
uv.setRegisterCount(new Integer(String.valueOf(o[4])));
} else {
uv.setRegisterCount(0);
}
list.add(uv);
}


感谢分享!留念!

0 0
原创粉丝点击