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

时间:2010-05-29 21:41:46

标签: java orm jpa jpql

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

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

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

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

2 个答案:

答案 0 :(得分:5)

您获得Object[](或List<Object[]>)。来自JPA 1.0规范的 4.8.1 SELECT子句的结果类型部分:

  

SELECT子句的结果类型   由结果类型定义   包含在 select_expressions 中   它。当多个 select_expressions 时   用于SELECT子句,   查询的结果是类型   Object[]以及此中的元素   结果对应于   他们的规范的顺序   SELECT子句和in类型   每个的结果类型   的 select_expressions

如果要进行强类型输入,可以在SELECT子句中使用构造函数表达式。从 4.8.2 SELECT子句中的构造函数表达式

部分
  

可以使用构造函数   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

答案 1 :(得分:0)

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