當我在使用Oracle 10g和NHibernate分頁數據時,我們遇到了一些奇怪的行爲。Oracle 10g分頁返回錯誤的結果集'rownum'和NHibernate
我有一個20行的表,我想在列表中顯示每個站點10行,所以我的列表有2個頁面。
使用NHibernate我設置爲第一頁query.SetMaxResults(10).SetFirstResult(0)
, 和第二頁query.SetMaxResults(10).SetFirstResult(10)
。
下面的SQL將第一頁創建:
SELECT * FROM table WHERE rownum <= 10;
下面的SQL將進行第二頁創建:
SELECT row_.*, rownum rownum_
FROM
(
SELECT *
FROM table
) row_
WHERE rownum <= 20 WHERE rownum_ > 10;
首先查詢正確返回前10行,而第二個查詢返回只有4個新行和6行已經在「頁面1」中。所以6行完全缺失。
所以,我想,這到底是什麼?
你可以發佈完整的查詢嗎?你是否渴望加載任何孩子? – Rippo
你的第二個查詢是使用外部查詢中的'rownum'兩次。根本沒有使用內部查詢。 – Ben
由於在外部查詢中有兩個「WHERE」關鍵字,因此您的查詢看起來會變形。在第1頁和第2頁之間有沒有DML?也theres沒有秩序..因此不保證排序。 – DazzaL