如何将JPA Query写入等效的mysql查询

时间:2012-04-20 07:00:03

标签: jpa

我想将等效的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()。

任何人都可以告诉我或给我链接,我可以在哪里找到解决方案。

1 个答案:

答案 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.