2017-04-19 43 views
3

由於標題狀態,我想只檢索例如1000行的最大值,但如果查詢結果將是1001,我想以某種方式知道。我見過的例子會檢查第二個查詢結果中的行數,但我想在查詢中使用它來獲得1000行。我正在使用休眠和標準從我的數據庫接收我的結果。數據庫是MS SQL休眠限制的結果數量,但檢查更多

回答

2

你想要的東西不能以通用的方式提供。

了分頁2種通常模式是:

  1. 使用2個查詢:第一個計數,下一個獲得結果的頁面
  2. 使用只有一個查詢,在那裏你去取結果比你顯示網頁

隨着第一圖案上更重要的是,你的分頁有更多的功能,因爲你可以顯示的頁面的總數,並允許用戶跳轉到,他直接想要的頁面,但你這種可能性是以增加成本爲代價的al sql查詢。

使用第二種模式,您可以只是告訴用戶是否還有一頁數據。然後用戶可以跳到下一頁(或者他已經看到的任何前一頁)。

+0

感謝您的回答。我將不得不考慮哪種解決方案更適合,但是您給出了一個很好的答案 – XtremeBaumer

1

你想有來自兩個不同的查詢的結果兩個信息:

  • 選擇(數量)從...

  • 選擇COL1,COL2,從...

您不能在單個執行的條件或JPQL查詢中執行此操作。
但是,您可以根據使用的DBMS以不同的方式使用本機SQL查詢(通過使用子查詢)來完成此操作。

通過這樣做,您可以使代碼變得更加複雜,使其更加依賴於特定的DBMS,並且在性能方面您可能無法獲得真正的東西。
我認爲你應該使用count而第二個查詢來獲取行。

如果後來你想利用count的結果來獲取下一個結果,你應該傾向於使用Hibernate提供的分頁機制,而不是自定義的方式。

+0

感謝您的回答,因爲我想使用hibernate,本機查詢不適合我。反正一個好的答案 – XtremeBaumer

+0

不客氣。實際上,您也可以使用Hibernate的原生查詢。但是在使用它之前你必須考慮兩次,就好像你決定使用ORM一樣,原生SQL應該是例外和合理的情況。 – davidxxx