Hibernate возвращает два столбца вместо одного при использовании метода setFirstResults & setMaxResults с Oracle - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть запрос, который выбирает один столбец, и я выполняю запрос в пакетах, используя методы setFirstResults & setMaxResults SQLQuery.

Отрывок:

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
}

Я установил в true параметр showSQL в конфигурации hibernate, чтобы увидеть строку запроса, которую создает 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 выбирает два.

Это известная проблема? Могу ли я сделать что-то другое или я делаю что-то не так?

Я не хочу преобразовывать набор результатов в два разных типа перед его использованием / обработкой.

...