2010-05-29 47 views
5

我试图做一些事情是易如反掌的PHP &有限公司: SELECT COUNT(X)作为一个numItems,AVG(y)的平均值,... FROMžJPQL:查询多列时,哪种对象包含结果列表?

在PHP中我会得到一个简单数组如[{一个numItems:0,平均:0}]我可以用这样的:

echo "Number of Items: " . $result[0]['numItems']; 

通常在JPQL只查询单个对象或单列,并得到列表类型,例如List<SomeEntity>List<Long>。但是当查询多列时,你会得到什么?

回答

5

您收到Object[](或List<Object[]>)。从SELECT子句的JPA 1.0规范的的部分4.8.1结果类型:

SELECT子句 的结果类型是由包含在 的结果类型的 的select_expressions定义它。当多个select_expressions SELECT子句中使用时,该查询的 结果是 Object[]型的,并且在该 结果的元件,以便对应于 顺序其说明书的 SELECT子句中和在型到 结果类型的每个 select_expressions

如果您想要强类型化,可以在SELECT子句中使用构造函数表达式。从部分4.8.2构造函数表达式在SELECT子句

构造函数可以在 选择列表中用于返回一个或多个Java 实例。指定的类是而不是 需要成为实体或将 映射到数据库。 构造函数的名称必须完全符合 的限定条件。

如果在SELECT NEW子句中指定实体类名称 ,则结果实体实例 处于新状态。

SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count) 
FROM Customer c JOIN c.orders o 
WHERE o.count > 100 
+0

非常感谢你的回答! – Bunkerbewohner 2010-05-29 21:58:52

0

您还可以使用元组,并返回元组(List<Tuple>)的列表,你可以作为地图的列表中使用。