使用setFirstResults&时,Hibernate返回两列而不是一列。使用Oracle的setMaxResults方法

时间:2018-04-27 20:31:59

标签: oracle hibernate rownum

我有一个选择单列的查询,我使用setFirstResults& amp;批量执行查询。 SQLQuery的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的查询版本选择了两列。

这是已知的问题吗?我可以做些不同的事情,还是我做错了什么?

在使用/处理之前,我不想将结果集转换为两种不同的类型。

0 个答案:

没有答案