Я реализую разбивку на страницы по набору результатов из спящего режима. В настоящее время я делаюПодсчет результатов из Hibernate
long count = getCountResultForNamedQuery();
List result = getResultForNamedQuery()
где два запроса что-то вроде
select count(*) from addresses where country = 'USA';
и
select * from addresses where country = 'USA';
Для пагинацией я обычно обновлять getResultForQuery так что имеет .setFirstResult и setMaxResult установлен. Затем будет возвращен только тот раздел, который я хочу. Мне нужно сделать подсчет, чтобы я знал, сколько страниц будет показано на странице страницы страницы.
Мне было интересно, могу ли я быть более эффективным. Могу ли я просто сделать
List result = getResultForQuery();
int count = result.size();
List subResult = result.subList(start, end);
Имеет ли это смысл? Я пытаюсь вызвать только один запрос, если это возможно. Вопрос в том, как умный спящий режим? Когда я вызываю размер, он подсчитывает возвращаемые им оболочки объекта или пытается и разрешает все, а затем попадает в базу данных? Какой образец лучше использовать?
Извините, если пример недостаточно ясен. Я попытался максимально упростить его и, возможно, упростил его!
Заранее благодарен!
Спасибо за ответ. Я думаю, это ответ на мой вопрос. Я не был уверен, будут ли загружены все адреса США. Я понял, что Hibernate только возвращает оболочки объектов, а затем явным образом извлекает каждое поле, когда на него фактически был обращен код. Я не был уверен, что размер() будет делать в списке результатов - отсюда мои вопросы – RNJ
Я действительно советую вам включить ведение журнала SQL при разработке с помощью Hibernate. Это заставит вас понять, когда Hibernate выполняет запросы, какие запросы он выполняет, и что вы можете сделать, чтобы избежать ненужных запросов. –