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