CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
CriteriaQuery<Long> cq = cb.createQuery(A.class);
Root<A> rootCount = countQuery.from(A.class);
List<Predicate> predicates = new ArrayList<>();
List<Predicate> predicatesCount = new ArrayList<>();
Predicate p = cb.equal(root.get(A.ID), 1);
predicates.add(p);
Predicate p1 = cb.equal(rootCount.get(A.ID), 1);
predicatesCount.add(p1);
...
// execute both query to get result
感谢阅读!
下面的示例展示了如何设置标准构建器/谓词限制,然后重用该限制来执行计数查询。
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<EntityStub> criteriaQuery = builder.createQuery(EntityStub.class);
Root<EntityStub> entity_ = criteriaQuery.from(EntityStub.class);
entity_.alias("entitySub"); //assign alias to entity root
criteriaQuery.where(builder.equal(entity_.get("message"), "second"));
// Generic retrieve count
CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
Root<T> entity_ = countQuery.from(criteriaQuery.getResultType());
entity_.alias("entitySub"); //use the same alias in order to match the restrictions part and the selection part
countQuery.select(builder.count(entity_));
Predicate restriction = criteriaQuery.getRestriction();
if (restriction != null) {
countQuery.where(restriction); // Copy restrictions
}
Long count = entityManager.createQuery(countQuery).getSingleResult();
看看这是否对您有帮助,注意根别名,在执行计数查询时,确保实体类类型是long.class
https://forum.hibernate.org/viewtopic.php?p=2471522p2471522
我使用JPA CriteriaQuery构建动态查询,并传入一个Spring数据分页对象: 在后端,我的存储库中有一个方法来支持动态查询: 但是,返回的数据是未排序的,所以我想问的是,在CriteriaQuery中实现分页的任何方法。
我试图用一个CriteriaQuery在JPA/Hibernate中复制这个查询的结果。 daysBack值作为参数传入。 日志输出为:测量表的计数为:36 然而,表中只有6行,这向我表明正在生成某种自连接或交叉积来创建36的输出。我应该做什么不同的事情来获得正确的计数?
问题内容: 我有一个问题,我需要使用LEAST和GREATEST函数联接两个表,但要使用JPA CriteriaQuery。这是我要复制的SQL … 我看过CriteriaBuilder.least(..)和great(..),但是在尝试理解如何创建传递给任何一个函数的过程中遇到了困难。 问题答案: 事实证明,CriteriaBuilder确实支持将LEAST和GREATEST作为非聚合函数来调用
我对JPA相当陌生,它是CriteriaBuilder/CriteriaQuery API: 我想查询一组对象的摘录(如下所示,我只选择结果中的元素n到m) 查询本身运行良好,我得到了预期的结果。 但是如果我尝试计算所有可能的结果,我会得到一个java。lang.IllegalArgumentException: org.hibernate.hql.internal.ast.无效路径:'生成lia
我在用户和电话号码之间有一种“一对一”的关系。因此,一个用户可以有多个电话号码。 在前端,我必须只提取登录用户的电话号码,或者如果用户是管理员,我必须显示所有用户的电话号码。我已经设法实现了这一部分,但我遇到的问题如下:在前端,用户还有一个“电话号码”搜索框。因此,如果用户或管理员搜索987(比如前3位数字),则应显示包含“987”且与其个人资料相关联的任何电话号码。如果用户是管理员,我应该显示包