我已经尝试过 这个 解决办法。
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
s. 是 Tuple
不被EclipseLink支持,还是什么问题?
调试器显示其实是一个 Vector
的 Object
s:
我使用TomEE 8,它使用EclipseLink 2.7.4.v20190115作为JPA。我可以用JPA Criteria Query试试,但我是从SQL转换过来的,如果转换成JPQL会更容易。
编辑1
喏 是链接文章作者的回答,也说明这个应该可以。
编辑2
EclipseLink 发出 创建。
编辑3
幸运的是,它可以与JPA Criteria Query(CriteriaBuilder#createTupleQuery()
). 将SQL转换为这样的方式比较麻烦,但至少能用。
一个带投影的查询总是返回 List<Object[]>
只要你不使用构造函数表达式与
select new x.y.Tuple(f.Id, f.Project) from FirewallRequest f
但你就需要一个构造函数与投影相匹配的Tuple。