Jakarta ee 返回TypedQuery值可以为NULL的非实体对象列表

Jakarta ee 返回TypedQuery值可以为NULL的非实体对象列表,jakarta-ee,jpql,Jakarta Ee,Jpql,我正在查看,它说您可以返回一个列表: TypedQuery query=em.createQuery( “从国家/地区选择c.name、c.capital.name作为c”,对象[]类); List results=query.getResultList(); 对于(对象[]结果:结果){ System.out.println(“国家:+result[0]+”,大写:+result[1]); } 现在我这样做是因为: 由于托管实体对象的构造有一些开销,因此返回非实体对象的查询(如上面的两个查询

我正在查看,它说您可以返回一个
列表

TypedQuery query=em.createQuery(
“从国家/地区选择c.name、c.capital.name作为c”,对象[]类);
List results=query.getResultList();
对于(对象[]结果:结果){
System.out.println(“国家:+result[0]+”,大写:+result[1]);
}
现在我这样做是因为:

由于托管实体对象的构造有一些开销,因此返回非实体对象的查询(如上面的两个查询)通常效率更高。此类查询主要用于高效显示信息。对于更新或删除实体对象的操作(其中需要托管实体对象),它们的效率较低


现在我有了类似的实体,只是实体国家的实体资本可以为空。当我想要获取
列表时,它无法正常工作,因为它无法从大写字母访问属性名称(正如我所说的大写字母可以为NULL)。我希望如果大写字母为NULL,那么对象[]应该包含该属性的NULL值。

您可以使用CASE语句:

"SELECT c.name, CASE WHEN (c.capital IS NULL) THEN NULL ELSE c.capital.name END FROM Country AS c"

这是我在使用您的语句时得到的结果:java.lang.ClassCastException:org.hibernate.hql.internal.ast.tree.SqlNode不能强制转换为org.hibernate.hql.internal.ast.tree.SelectExpression您使用的hibernate的哪个版本?也许您可以尝试此链接中的建议使用否定条件(即不是NULL)我正在使用Hibernate4.0.1。我已经否定了,它现在起作用了。谢谢
"SELECT c.name, CASE WHEN (c.capital IS NULL) THEN NULL ELSE c.capital.name END FROM Country AS c"