簡體   English   中英

Spring Boot + Hibernate + SqlAzure分頁問題

[英]Spring boot + Hibernate + SqlAzure pagination issue

我有一個使用休眠作為ORM的Java Spring Boot應用程序。 該數據庫是Azure SQL Server。

我已經在供應商適配器配置上啟用了setShowSql。

當我想查找對象時,我使用TypedQuery的方法setFirstResultsetMaxResults然后調用getResultList方法。

控制台中打印的查詢不包含OFFSET和ROW FETCH子句,而且似乎Hibernate首先檢索所有結果,然后將分頁應用於結果列表。

這顯然會導致性能問題。

我在哪里做錯了?

下面我報告我使用的示例代碼。

query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
...
query.getResultList()

當滿足以下條件時,Hibernate唯一一次在SQL Server方言中明確包含OFFSETFETCH子句的時間是:

  1. 您必須使用org.hibernate.dialect.SQLServer2012Dialect或任何將來的2012+版本。
  2. 您的查詢必須包含ORDER BY子句。
  3. 您的查詢未執行TOP子句查詢。

SQLServer2012Dialect使用一個名為SQLServer2012LimitHandler的自定義LimitHandler實現,您可以在此處看到該實現顯式處理此用例,否則將退回到舊行為。

如果以上兩個要求都得到滿足,但是由於某種原因邏輯仍然回到原來的行為,那就是一個錯誤。 在這種情況下,您可能應該使用測試用例更新HHH-12152 ,以便我們進行修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM