如何在JPA中的两列上运行SUM等聚合函数并显示其结果?

我是JPA的新手。 所以我的问题对某些人来说应该是如此简单。

下面是SQL中的简单查询,我想将其转换为JPA。 我已经有一个名为TimeEnt的实体类。

 SELECT SUM(TimeEntryActualHours) as UnBilledHrs, SUM (TimeEntryAmount) as UnbilledAmount FROM TimeEnt WHERE MatterID = 200 

JPA查询语言确实支持SELECT子句中的聚合函数,如AVG,COUNT,MAX,MIN,SUM,并且支持SELECT子句中的多个select_expressions ,在这种情况下,结果是List of Object数组( Object[] )。 从JPA规范:

4.8.1 SELECT子句的结果类型

SELECT子句的结果类型由其中包含的select_expressions的结果类型定义。 当在SELECT子句中使用多个select_expressions时,查询的结果是Object[]类型,并且此结果中的元素按照SELECT子句中的规范顺序和每个类型的结果类型的顺序对应。 select_expressions

换句话说,你在评论中提到的那种查询(因为你没有提供你的实体,我将根据你的例子给出答案)是支持的,没问题。 这是一个代码示例:

 String qlString = "SELECT AVG(x.price), SUM(x.stocks) FROM Magazine x WHERE ..."; Query q = em.createQuery(qlString); Object[] results = (Object[]) q.getSingleResult(); for (Object object : results) { System.out.println(object); } 

参考

  • JPA 1.0规范
    • 4.8.1 SELECT子句的结果类型
    • 4.8.4 SELECT子句中的聚合函数

让我们认为我们有一个名为Product实体:

 final Query sumQuery = entityManager .createQuery("SELECT SUM(p.price), SUM(p.sale) FROM Product p WHERE p.item=:ITEM AND ...."); sumQuery.setParameter("ITEM","t1"); final Object result= sumQuery.getSingleResult(); // Return an array Object with 2 elements, 1st is sum(price) and 2nd is sum(sale). //If you have multiple rows; final Query sumQuery = entityManager .createQuery("SELECT SUM(p.price), SUM(p.sale) FROM Product p WHERE p.item in (" + itemlist + ") AND ...."); // Return a list of arrays, where each array correspond to 1 item (row) in resultset. final List sumEntityList = sumQuery.getResultList(); 

看一下EJB Query Language规范。

这个成语与标准SQL非常相似

 EntityManager em = ... Query q = em.createQuery ("SELECT AVG(x.price) FROM Magazine x"); Number result = (Number) q.getSingleResult (); 

问候,