Hibernate возвращает два столбца вместо одного при использовании метода setFirstResults & setMaxResults с Oracle
У меня есть запрос, который выбирает один столбец, и я выполняю запрос в пакетном режиме, используя методы setFirstResults & setMaxResults SQLQuery.
Snippet:
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 выбирает два.
Это известная проблема? Могу ли я сделать что-то другое или я делаю что-то не так?
Я не хочу преобразовывать результирующий набор в два разных типа перед его использованием / обработкой.