我尝试过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
还是问题?
调试器显示它实际上是Vector
的Object
:
我正在使用将EclipseLink 2.7.4.v20190115用于JPA的TomEE 8。我可以尝试使用JPA Criteria Query,但是我正在从SQL转换,因此将其转换为JPQL会更容易。
编辑1
[Here是链接文章的作者的回答,也表明这应该可行。
编辑2
创建了EclipseLink issue。
带有投影的查询总是返回List<Object[]>
只要您不将构造函数表达式与]一起使用,
select new x.y.Tuple(f.Id, f.Project) from FirewallRequest f
但是您需要一个具有与投影匹配的构造函数的元组。