5

我正在尝试在 PHP & Co 中做一些简单的事情:SELECT COUNT(x) as numItems, AVG(y) as average, ... FROM Z

在 PHP 中,我会得到一个像 [{ numItems: 0, average: 0 }] 这样的简单数组,我可以像这样使用它:

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

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

4

2 回答 2

5

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

SELECT 子句的结果类型由其中包含的select_expressions的结果类型定义。在 SELECT 子句中使用多个select_expression 时,查询的结果是 type Object[],并且该结果中的元素按照它们在 SELECT 子句中指定的顺序和 type 对应于每个 select_expressions的结果类型.

如果您想要强类型,您可以在 SELECT 子句中使用构造函数表达式。从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
于 2010-05-29T21:51:12.777 回答
0

您还可以使用 Tuple 并返回一个 Tuple ( List<Tuple>) 列表,您可以将其用作 Map 列表。

于 2015-04-08T02:52:08.907 回答