0

我想将等效的 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,duration,charge,startDate

实体类是用户。

我想使用 JPA 的 createQuery() 。

谁能告诉我或给我链接我在哪里可以找到解决方案。

4

1 回答 1

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));
}

此外,如果您只想按日期过滤,但在您的模型中有时间戳,您可以仅使用 Hibernate答案中的时间戳检查此比较日期的日期部分。

JPA 还提供构造结果类作为返回值,因此您可以对列进行分组。阅读更多。

于 2012-04-20T08:05:39.110 回答