如何使用EclipseLink从JPQL查询中返回键值对映射列表?

问题描述 投票:0回答:1

我已经尝试过 这个 解决办法。

List<javax.persistence.Tuple> result = entityManager.createQuery("select f.Id as Id, f.Project as Project from FirewallRequest f", javax.persistence.Tuple.class)
                                                    .getResultList();
result.get(0).get("Project");

我得到了这个。

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class javax.persistence.Tuple ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; javax.persistence.Tuple is in unnamed module of loader java.net.URLClassLoader @7a9273a8)

所以它似乎在返回 ListObject而不是 Tuples. 是 Tuple 不被EclipseLink支持,还是什么问题?

调试器显示其实是一个 VectorObjects:

enter image description here

我使用TomEE 8,它使用EclipseLink 2.7.4.v20190115作为JPA。我可以用JPA Criteria Query试试,但我是从SQL转换过来的,如果转换成JPQL会更容易。

编辑1

是链接文章作者的回答,也说明这个应该可以。

编辑2

EclipseLink 发出 创建。

编辑3

幸运的是,它可以与JPA Criteria Query(CriteriaBuilder#createTupleQuery()). 将SQL转换为这样的方式比较麻烦,但至少能用。

jpa eclipselink jpql
1个回答
0
投票

一个带投影的查询总是返回 List<Object[]>

只要你不使用构造函数表达式与

select new x.y.Tuple(f.Id, f.Project) from FirewallRequest f

但你就需要一个构造函数与投影相匹配的Tuple。

© www.soinside.com 2019 - 2024. All rights reserved.