oracle - 当使用 Oracle 的 setFirstResults 和 setMaxResults 方法时,休眠返回两列而不是一列
问题描述
我有一个选择单个列的查询,我正在使用 SQLQuery 的 setFirstResults 和 setMaxResults 方法批量执行查询。
片段:
SQLQuery query = <query object with query projecting a single column>;
int maxResults = 50;
int batchSize = 50;
for (int i = 0; ; i++) {
query.setFirstResult(batchSize*i);
query.setMaxResults(maxResults);
List resultSet = query.list();
if(resultSet.isEmpty())
break;
//process result set
}
我将 hibernate 配置中的 showSQL 参数设置为 true 以查看 hibernate 生成的查询字符串。对于第一批,即当 i=0 时,下面是 hibernate 生成的查询:
select * from (/* query selecting single column here */) where rownum <= ?;
这是有道理的,因为它是第一批,我们想要第一行的结果,rownum 用于将结果数限制为 maxResults。
现在对于第二次和后续的批量读取,hibernate 生成的查询是:
select * from ( select row_.*, rownum rownum_ from (/*query selecting single column here */) row_ where rownum <= ?) where rownum_ > ?;
您可以清楚地看到,上面的查询选择了两列,一列是行号本身。
因此,当我的查询只选择一列时,hibernate 的查询版本选择了两列。
这是已知问题吗?我可以做一些不同的事情还是我做错了什么?
我不想在使用/处理它之前将结果集转换为两种不同的类型。
解决方案
推荐阅读
- c++ - Hash table - adding a rehash to resize method
- kubernetes - Kubernetes podAntiAffinity affects deployment - FailedScheduling - didn't match pod affinity/anti-affinity
- google-apps-script - How can I copy a table with some cells that have an image inside from a doc to another
- android - Items of Recycler View is not showing
- python - Python MySQL - 如果其他列中的值相等,则合并(相加)表中某些列中的值
- python - linux中“find”命令中的子进程stdout readline()编码错误
- python-3.x - 如何抓取没有特定类的文本
- python - 基数为 10 的 int() 的无效文字:'1 2 3 89 4 10'
- javascript - 当我使用 jquery 动态添加新表单输入时,Select2 输入不起作用
- uwp-xaml - 如何将 ContentDialog 添加到我的 XAML 而不会收到有关它的错误消息?