【问题标题】:JPQL: What kind of objects contains a result list when querying multiple columns?JPQL:查询多列时,什么样的对象包含结果列表?
【发布时间】:2011-02-25 13:45:01
【问题描述】:

我正在尝试做一些在 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>List<Long>。但是,当查询多个列时,您会得到什么?

【问题讨论】:

    标签: java orm jpa jpql


    【解决方案1】:

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

    SELECT 子句的结果类型 由结果类型定义 select_expressions 包含在 它。当多个 select_expressions 在 SELECT 子句中使用, 查询的结果是类型 Object[],以及其中的元素 结果对应于 他们在规范中的顺序 SELECT 子句和类型 每个结果类型 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
    

    【讨论】:

    • 非常感谢您的回答!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多