2015-09-03 4 views
4

Я хочу использовать разбиение на страницы в своем приложении. Вот простой пример: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(); 
} 

Когда я прошу первую страницу, я получил свой результат без проблем, но когда я задаю вторую страницу (страница = 1, размера = 10, например), я получил следующее сообщение об ошибке

[PersistenceException: запрос бросил SQLException: оконные функции не поддерживают константы как выражения ORDER BY.

Я использую 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.*" 
+0

Поймать реальный код SQL, который отправляется в БД и размещать здесь. – lad2025

+0

Я обновил вопрос. Добавлен SQL. Кажется, что существует реальная проблема с синтаксисом SQL. У меня такая же ошибка, когда я запустил SQL-клиент. Так что я должен каким-то образом изменить этот синтаксис? Спасибо –

+0

Отличный пейджинг, TOP 30, нет ORDER BY, row_number, упорядоченный по NULL. Можете ли вы изменить ** SQL Dialect ** для вашего ORM или sth, как это? – lad2025

ответ

4

Наконец я получил его. При использовании разбиения на страницы необходимо явно указать столбец заказа в запросе.

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

однако сообщение об ошибке полностью перепутано с моим разумом.

Смежные вопросы