2014-02-04 2 views
2

У меня есть запрос, который возвращает все результаты для конкретного запроса,Проверьте результаты javax.persistence.TypedQuery ResultSet hasMore

public List<MyObjs> getMyObjsForCustomer(final Long customerId) throws IOException { 
} 

Это работало отлично на некоторое время, но теперь мне нужно ограничить результирующий набор для выполнения причины, что-то вроде ..

query.setMaxResults(1000); 

Однако, я хотел бы умный способ узнать, если есть больше результатов, что 1000 для обработки пользовательского интерфейса подкачки и т.д., обрабатывать следующий вызов и так далее. Есть ли способ узнать, есть ли больше записей, соответствующих моему запросу, чем 1000 возвращенных? эквивалент

query.hasMore(); 

например. Я могу получить идентификатор последней возвращенной записи и использовать ее в качестве отправной точки для моего следующего запроса, но мне было интересно, есть ли другой способ?

ответ

4

Проблема заключается в том, что Hibernate не будет знать, есть ли еще какие-либо результаты, поскольку ограничение выполняется в запросе, и база данных не сообщает вам, имеет ли ваш запрос больше результатов, чем запрошенный лимит. Вы можете сделать запрос на подсчет, чтобы получить общее количество, но это может быть очень дорого.

Лучшим трюком является установка ваших максимальных результатов на 1 больше, чем фактический размер страницы. Например, если вы показываете страницу с 50 результатами, вы фактически запрашиваете базу данных для maxResults = 51. Вы возвращаете только записи 1-50 для своего клиента, но если вы действительно получили 51 отчет, вы можете сказать им там больше результатов (по крайней мере один, правильно?).

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