jpa – 元组结果Criteria API子查询
发布时间:2020-12-15 02:59:56 所属栏目:Java 来源:网络整理
导读:我试图在我正在使用JPA 2.0类型安全标准API编写的应用程序中使用子查询,Hibernate 3.6.1.Final作为我的提供者.我没有选择原始类型(Long,MyEntity等)的问题,但我想选择多个列. 这是一个完全合理的例子.忽略子查询的不必要使用 – 它仅仅是说明性的. EntityMan
我试图在我正在使用JPA 2.0类型安全标准API编写的应用程序中使用子查询,Hibernate 3.6.1.Final作为我的提供者.我没有选择原始类型(Long,MyEntity等)的问题,但我想选择多个列.
这是一个完全合理的例子.忽略子查询的不必要使用 – 它仅仅是说明性的. EntityManager em = getEntityManager(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = cb.createTupleQuery(); Subquery<Tuple> subQ = cq.subquery(Tuple.class); Expression<Long> subqCount; { Root<MyEntity> root = subQ.from(MyEntity.class); Path<MyEntity> filter = root.get(MyEntity.challenge); subqCount = cb.count(root); // How to select tuple? Selection<Tuple> tuple = cb.tuple(filter,subqCount); // !! Run-time exception here Expression<Tuple> tupleExpr = (Expression<Tuple>) tuple; // Not sure why I can't use multiSelect on a subQuery // #select only accepts Expression<Tuple> createSubQ.select(tupleExpr); createSubQ.groupBy(filter); } cq.multiselect(subqCount); 虽然编译器没有抱怨,但我仍然遇到运行时异常. java.lang.ClassCastException: org.hibernate.ejb.criteria.expression.CompoundSelectionImpl cannot be cast to javax.persistence.criteria.Expression >这是休眠中的错误,还是我做错了什么? 解决方法
我也有同样的问题.
我只能尝试回答你的上一个问题,说你只能使用子查询来执行非常简单的查询,例如: SELECT name FROM Pets WHERE Pets.ownerID in ( SELECT ID FROM owners WHERE owners.Country = "SOUTH AFRICA" ) 我想说的另一件事是这件事让我想起了xkcd #979. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |