[英]Spring boot + Hibernate + SqlAzure pagination issue
我有一個使用休眠作為ORM的Java Spring Boot應用程序。 該數據庫是Azure SQL Server。
我已經在供應商適配器配置上啟用了setShowSql。
當我想查找對象時,我使用TypedQuery的方法setFirstResult
和setMaxResults
然后調用getResultList
方法。
控制台中打印的查詢不包含OFFSET和ROW FETCH子句,而且似乎Hibernate首先檢索所有結果,然后將分頁應用於結果列表。
這顯然會導致性能問題。
我在哪里做錯了?
下面我報告我使用的示例代碼。
query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
...
query.getResultList()
當滿足以下條件時,Hibernate唯一一次在SQL Server方言中明確包含OFFSET
和FETCH
子句的時間是:
org.hibernate.dialect.SQLServer2012Dialect
或任何將來的2012+版本。 ORDER BY
子句。 TOP
子句查詢。 SQLServer2012Dialect
使用一個名為SQLServer2012LimitHandler
的自定義LimitHandler
實現,您可以在此處看到該實現顯式處理此用例,否則將退回到舊行為。
如果以上兩個要求都得到滿足,但是由於某種原因邏輯仍然回到原來的行為,那就是一個錯誤。 在這種情況下,您可能應該使用測試用例更新HHH-12152 ,以便我們進行修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.