java – Hibernate和Criteria API返回Object数组而不是Tuple
我正在尝试Criteria API,并且面临着与Tuples的奇怪问题.
我正在构建一个类似于此处描述的查询: 但由于某种原因,结果列表实际上是List< Object []>而不是List< Tuple>,所以我的代码在运行时失败了. 这是我的查询的代码: CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = cb.createTupleQuery(); Root<Users> usersRoot = cq.from(Users.class); Path<String> namePath = usersRoot.get(Users_.fullName); Path<Integer> employeeIdPath = usersRoot.get(Users_.employeeId); cq.multiselect(namePath,employeeIdPath); List<Tuple> resultList = entityManager.createQuery(cq).getResultList(); List<String> names = new ArrayList<>(); for (Tuple tuple : resultList) { names.add(tuple.get(namePath)); } 这段代码编译正确,但是当我到达for循环时,我得到一个ClassCastException:java.lang.ClassCastException:[Ljava.lang.Object;无法转换为javax.persistence.Tuple 调试确认返回的结果列表确实包含Object []而不是Tuple,因此破坏了API契约. 我的hibernate maven依赖项: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.21.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>5.0.4.Final</version> </dependency> 此代码作为EJB 3.1应用程序部署到Weblogic 12.1.3容器,底层数据库是Oracle 12. 解决方法
我试过你的例子,它运作得很好.在我的GitHub存储库中查看
this test:
doInJPA(entityManager -> { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = cb.createTupleQuery(); Root<BlogEntityProvider.Post> postRoot = cq.from(BlogEntityProvider.Post.class); Path<Long> idPath = postRoot.get("id"); Path<String> titlePath = postRoot.get("title"); cq.multiselect(idPath,titlePath); List<Tuple> resultList = entityManager.createQuery(cq).getResultList(); for (Tuple tuple : resultList) { Long id = tuple.get(idPath); String title = tuple.get(titlePath); } }); 这是5.0.3.Final.如果这不适用于4.2.21,请在Hibernate Jira上添加一个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |