jpa - 如何使用 JPA Criteria 计算查询中的行数?
问题描述
我正在编写一个为 UI 表提供数据的模块,用户可以在其中传递 JPA Criteria 查询。获取数据很好。但是我找不到解决方案来计算查询中的行数以指定表的“长度”。
我想要做的是将查询作为新查询的 FROM 部分中的子查询传递,但我不知道这是否可能与 Criteria.
生成的 SQL 应该是这样的:
SELECT count(1) FROM <user specified query as subquery>
我发现的所有示例都说我应该使用相同的根、相同的连接...等重新创建查询。并更改选择以包含计数,但这比这要复杂得多,而且,如果我这样做,我必须考虑以下内容:如果原始查询包含 group by 子句怎么办,我如何将其复制到新的查询而不在结果中获得多行。
我试过这样做:
CriteriaQuery countingQuery = criteriaBuilder.createQuery(Long.class);
Root from = countingQuery.from(userSpecifiedQuery.subquery(entityClass));
countingQuery.select(criteriaBuilder.count(criteriaBuilder.literal(1L)));
但是没有from
接受Subquery
作为参数的方法。
该类Subquery
具有可以从 中创建 a 的方法correlate
,该方法可以用来代替,但我无法弄清楚要传递给该方法的根。Root
Subquery
countingQuery.from()
correlate
java-doc 说:
/**
* Create a subquery root correlated to a root of the
* enclosing query.
* @param parentRoot a root of the containing query
* @return subquery root
*/
更让我困惑。在我的情况下,“封闭”查询的根不是此方法创建的根吗?(或者也许这种方法和我想的完全不同?)
解决方案
推荐阅读
- inno-setup - 仅在 Inno 设置中选择特定组件时显示自定义页面并将输入保存到文件
- objective-c - 来自类 Objective C 的 Swift 完成处理程序
- regex - 从引文中解析标题
- ios - 某些字母导致索引超出范围 CollectionView/TableView UISearchController
- java - Material Components 主题渲染 TextButton 不正确
- javascript - 从对象数组的水平位置更改为垂直位置
- linux - 跨平台应用程序的标准日志位置
- mysql - 如何使用group by获取sql结果中的行数
- c++ - 如何获取大小变化的字符串,随着用户在 C++ 中输入整个字符串而改变
- android - 在 Android Studio 中的虚拟设备上测试应用