播放2.4 Ebean分页问题

时间:2015-09-03 16:01:54

标签: java sql-server playframework ebean playframework-2.4

我想在我的应用程序中使用分页。这是一个简单的例子:

public static List<MyClass> getPage(int page, int size) {
    PagedList<MyClass> findPagedList = Ebean.find(MyClass.class).findPagedList(page,size);
    return findPagedList.getList();
}

当我要求第一页时,我得到的结果没有问题但是当我问第二页(例如页面= 1,尺寸= 10)时出现以下错误

  

[PersistenceException:Query抛出SQLException:Windowed函数不支持常量作为ORDER BY子句表达式。

我正在使用MsSQL和DB服务器。我该如何解决?

由于

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.*"

2 个答案:

答案 0 :(得分:4)

最后我明白了。使用分页时,必须在查询中明确定义order列。

Ebean.find(MyClass.class).order("id").findPagedList(page,size);

然而错误信息完全搞砸了。

答案 1 :(得分:2)

使用setFirstRow()setMaxRows()

的另一种方式
Model.find.where().setFirstRow(offset).setMaxRows(limit).findList();

Docs