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