0
我有一个Hibernate查询来检索限于最大数量的行的列表。但是,当我读了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(*),没有任何group by的查询不能返回多于1行。永远不会返回1500行。 –
我会扩展代码,我可能会略过一些代码。 – another