Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JPA查询写入等效的mysql查询_Jpa - Fatal编程技术网

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

如何将JPA查询写入等效的mysql查询,jpa,Jpa,我想为下面的mysql查询编写等价的JPA查询 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、呼叫类型、持续时间

我想为下面的mysql查询编写等价的JPA查询

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、呼叫类型、持续时间、费用、起始日期

实体类是用户

我想使用JPA的createQuery()


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

试试这个,它应该可以工作,如果没有,请评论,我们会让它工作:)

CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Tuple.class);
根实体=cq.from(User.class);
cq.multiselect(entity.get(“activePackage”),
cb.sum(实体获取(“持续时间”)作为(长期类)),
cb.总额(实体所得(“费用”)为(双重类别),
cb.count(实体).as(Long.class));
其中(cb.equal(entity.get(“callType”),“MO”),
cb.between(entity.get(“startDate”).as(Date.class),
新日期(),新日期());
groupBy(entity.get(“activePackage”);
List resultList=entityManager.createQuery(cq.getResultList();
for(元组结果:结果列表){
System.out.println(result.get(0)+“”+result.get(1)
+“”+result.get(2)+“”+result.get(3));
}
另外,如果只想按日期过滤,但模型中有时间戳,则可以检查此答案


JPA还提供了将结果类构造为返回值的功能,因此您可以对列进行分组

您好,任何人都可以给我回复…….我正在使用jpa查询,如下所示,但我得到了java.lang.IllegalArgumentException:无法为包含多个返回异常的查询创建TypedQuery。该查询如下所示:TypedQuery uQuery=(TypedQuery)entityManager.createQuery(“选择activePackage,SUM(duration),SUM(charge),COUNT(activePackage),其中callType=:callType和startDate介于:startDate和:endDate GROUP BY activePackage之间”,RaBdrRating.class);List listOfPackages=uQuery.getResultList();返回数据包列表;是的,我也试过了,它也给出了异常。但我的要求是我只能使用TypedQuery。你能检查一下你给出的查询吗?因为它表明我期望接近找到的精度。我检查了它,但我没有发现任何错误。所以你能检查一下吗?我不知道r JPA模型中的每个字段,因此您应该检查类型。在
entity.get(“duration”)。由于(Long.class)
duration很长,请应用您的类型。在
cb.sum(entity.get(“charge”)。由于(Double.class)
charge是Double,请应用您的类型。
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));
}