0

我正在查看JPQL SELECT 的这个示例,它说您可以返回List<Object[]>

TypedQuery<Object[]> query = em.createQuery(
    "SELECT c.name, c.capital.name FROM Country AS c", Object[].class);
List<Object[]> results = query.getResultList();
for (Object[] result : results) {
    System.out.println("Country: " + result[0] + ", Capital: " +     result[1]);
}

现在我这样做是因为:

因为托管实体对象的构造有一些开销,所以返回非实体对象的查询,如上面的两个查询,通常更有效。此类查询主要用于有效地显示信息。对于需要托管实体对象的更新或删除实体对象的操作,它们的生产力较低。

现在我有类似的实体,除了实体 Country 中的实体 Capital 可以为 NULL。当我想要获取时List<Object[]>,它无法正常工作,因为它无法从 Capital 访问属性名称(正如我所说的 Capital 可以为 NULL)。我希望如果 Capital 为 NULL,则 Object[] 应该包含该属性的 NULL 值。

4

1 回答 1

0

您可以使用 CASE 语句:

"SELECT c.name, CASE WHEN (c.capital IS NULL) THEN NULL ELSE c.capital.name END FROM Country AS c"
于 2012-08-17T08:04:32.600 回答