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

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

我尝试过this解决方案:

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)

因此它似乎返回的是List秒的Object而不是Tuple秒。 EclipseLink不支持Tuple还是问题?

调试器显示它实际上是VectorObject

enter image description here

我正在使用将EclipseLink 2.7.4.v20190115用于JPA的TomEE 8。我可以尝试使用JPA Criteria Query,但是我正在从SQL转换,因此将其转换为JPQL会更容易。

编辑1

[Here是链接文章的作者的回答,也表明这应该可行。

编辑2

创建了EclipseLink issue

jpa eclipselink jpql
1个回答
0
投票

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

只要您不将构造函数表达式与]一起使用,

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

但是您需要一个具有与投影匹配的构造函数的元组。

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