У меня есть запрос Hibernate, чтобы получить список строк, ограниченных номером maximun. Но когда я читаю журналы Hibernate, к моему удивлению, он фильтрует внутренне подзапрос, который имеет только одну строку select count(*)
Почему Hibernate регистрирует другой запрос, который он фактически не выполняет?
-- Log4j
-- INFO [STDOUT] Hibernate:
select *
from (select count(*) as y0_
from yyy this_
where this_.type=3 and
this_.VALUE=2 and
this_.src='ZZZZZ'
)
where rownum <= 100;
Критерии Outter это так:
criteria.setProjection(Projections.rowCount());
criteria.setMaxResults(MAX_RESULTS); // MAX_RESULTS = 100
final List results = criteria.list(); // It executes the above query here.
Что такое объяснение этому поведение? У меня больше запросов с этим вводящим в заблуждение результатом в журналах.
Я имею в виду, что setMaxResulst фактически фильтрует полученные данные на 100. Это необходимо. Я делаю внутренний запрос и имеет, например, 1500 возвращаемых значений, поэтому мне нужен фильтр 100, чтобы не перегружать. Он фильтрует по назначению. Но, с другой стороны, Hibernate интерпретирует запрос по-другому, например, если он имеет только 1 счетчик (*). Я буду обновлять вопрос с помощью внутреннего запроса. Спасибо за ваш быстрый ответ. – another
Запрос, выполняющий select count (*), без какой-либо группы, не может возвращать более 1 строки. Он никогда не вернет 1500 строк. –
Я буду расширять код, я мог бы сгладить некоторый код. – another