我想将等效的JPA查询写入以下mysql查询
select active_package,sum(duration),sum(charge),count(*)
from User
where call_type="MO"
and start_date between '2012-02-01' and '2012-02-09'
group by active_package;
对于JPA查询,相应的属性如下所示。
activePackage,CALLTYPE,持续时间,电荷,的startDate
实体类是User。
我想使用JPA的createQuery()。
任何人都可以告诉我或给我链接,我可以在哪里找到解决方案。
答案 0 :(得分:1)
尝试这个,它应该工作,如果没有,请评论,我们将使它工作:)。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);
Root<User> entity = cq.from(User.class);
cq.multiselect(entity.get("activePackage"),
cb.sum(entity.get("duration").as(Long.class)),
cb.sum(entity.get("charge").as(Double.class),
cb.count(entity).as(Long.class)));
cq.where(cb.equal(entity.get("callType"), "MO"),
cb.between(entity.get("startDate").as(Date.class),
new Date(), new Date()));
cq.groupBy(entity.get("activePackage"));
List<Tuple> resultList = entityManager.createQuery(cq).getResultList();
for (Tuple result : resultList) {
System.out.println(result.get(0) + " " + result.get(1)
+ " " + result.get(2) + " " + result.get(3));
}
此外,如果您只想按日期过滤,但在模型中有时间戳,则可以查看此Compare date's date part only with Timestamp in Hibernate答案。
JPA还提供构造结果类作为返回值,因此您可以对列进行分组。 Read more.