【发布时间】:2012-03-26 08:23:35
【问题描述】:
我用hibernate / JPA实现了一个服务器端数据分页,底层数据库是MS SQL Server 2008。
SQL 是这样生成的:
criteria.setFirstResult(pagingParams.getDisplayStart())
.setMaxResults(pagingParams.getDisplayLength());
(主要工作在于创建适当的过滤器/排序,但这与这里无关)
我观察到的是以下 SQL:
page (0-20):
select top 20 this_.id as id11_9_,...
page (20-40):
select top 40 this_.id as id11_9_,...
page (40-60):
select top 60 this_.id as id11_9_,...
...等等。
显然,如果底层结果集太大,这 (a) 将遇到严重问题,并且 (b) 与分页没有太大关系:-(
有人遇到过同样的问题吗?
更新:似乎 T-SQL 的 Row_Number() 函数的 NHibernate(Hibernate 的 .NET 实现)takes advantage。可惜 Hibernate 没有...
【问题讨论】:
标签: sql-server sql-server-2008 hibernate jpa orm