玩2.4 Ebean分页问题
Play 2.4 Ebean pagination issue
我想在我的应用程序中使用分页。这是一个简单的例子:
public static List<MyClass> getPage(int page, int size) {
PagedList<MyClass> findPagedList = Ebean.find(MyClass.class).findPagedList(page,size);
return findPagedList.getList();
}
当我请求第一页时,我得到的结果没有问题,但是当我请求第二页(例如 page=1,size=10)时,我得到了以下错误
[PersistenceException: Query threw SQLException:Windowed functions do not support constants as ORDER BY clause expressions.
我正在使用 MsSQL 和数据库服务器。我该如何解决?
谢谢
PS 这里是原始的 SQL
select *
from (
select top 30
row_number() over (order by null) as rn,
t0.ID c0, t0.update_date c1, t0.create_date c2,
t0.code c3, t0.is_fulfilled c4, t0.fulfill_date c5,
t0.fulfill_request_id c6, t0.app_id c7,
t0.access_code_header_id c8, t0.product_id c9
from access_code_details t0
) as limitresult where rn > 20 and rn <= 30
我的数据库配置:
db.default.url="jdbc:sqlserver://127.0.0.1:3333;databaseName=MyDB"
db.default.user=sa
db.default.password="******"
db.default.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
ebean.default.databasePlatform=com.avaje.ebean.config.dbplatform.MsSqlServer2005Platform
ebean.default="model.*"
终于明白了。使用分页时,必须在查询中显式定义顺序列。
Ebean.find(MyClass.class).order("id").findPagedList(page,size);
但是错误信息完全让我一头雾水。
使用setFirstRow()
和setMaxRows()
的另一种方式
Model.find.where().setFirstRow(offset).setMaxRows(limit).findList();
我想在我的应用程序中使用分页。这是一个简单的例子:
public static List<MyClass> getPage(int page, int size) {
PagedList<MyClass> findPagedList = Ebean.find(MyClass.class).findPagedList(page,size);
return findPagedList.getList();
}
当我请求第一页时,我得到的结果没有问题,但是当我请求第二页(例如 page=1,size=10)时,我得到了以下错误
[PersistenceException: Query threw SQLException:Windowed functions do not support constants as ORDER BY clause expressions.
我正在使用 MsSQL 和数据库服务器。我该如何解决?
谢谢
PS 这里是原始的 SQL
select *
from (
select top 30
row_number() over (order by null) as rn,
t0.ID c0, t0.update_date c1, t0.create_date c2,
t0.code c3, t0.is_fulfilled c4, t0.fulfill_date c5,
t0.fulfill_request_id c6, t0.app_id c7,
t0.access_code_header_id c8, t0.product_id c9
from access_code_details t0
) as limitresult where rn > 20 and rn <= 30
我的数据库配置:
db.default.url="jdbc:sqlserver://127.0.0.1:3333;databaseName=MyDB"
db.default.user=sa
db.default.password="******"
db.default.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
ebean.default.databasePlatform=com.avaje.ebean.config.dbplatform.MsSqlServer2005Platform
ebean.default="model.*"
终于明白了。使用分页时,必须在查询中显式定义顺序列。
Ebean.find(MyClass.class).order("id").findPagedList(page,size);
但是错误信息完全让我一头雾水。
使用setFirstRow()
和setMaxRows()
的另一种方式
Model.find.where().setFirstRow(offset).setMaxRows(limit).findList();