【发布时间】:2017-12-06 17:54:31
【问题描述】:
我有一个使用休眠作为 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()
【问题讨论】:
-
您使用的是哪种方言?您的查询是否还包含
ORDER BY片段或者结果是无序的? -
我试过所有的方言。我使用的实际方言是 org.hibernate.dialect.SQLServerDialect。关于按片段排序,是的,我已经包含并在打印的查询中看到它。今天我尝试了最新的稳定版本的hibernate,但结果是一样的。
标签: java spring hibernate azure pagination