JPQL:查询多个列时,哪种对象包含结果列表?

Bun*_*ner 5 java orm jpa jpql

我正在尝试做一些在PHP&Co中很容易的事情:SELECT COUNT(x)作为numItems,AVG(y)作为平均值,... FROM Z

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

echo "Number of Items: " . $result[0]['numItems'];
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*ent 5

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

SELECT子句的结果类型由其中包含的select_expressions的结果类型定义.当 在SELECT子句中使用多个select_expressions时,查询的结果是类型 Object[],并且此结果中的元素按照SELECT子句中的规范顺序和每个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
Run Code Online (Sandbox Code Playgroud)