Критерии гибернации подкачки - PullRequest
4 голосов
/ 27 июня 2011

Есть ли в JAVA hibernate способ выполнить запрос критерия, и проекции рассчитывают на этот же запрос в одной поездке в БД?

Причина, по которой вы хотите получить этот самый эффективный способ получения результатов на страницах, я надеялся сделать следующее

start transaction 
   start db call
     do query()
     do count()
   end db call
end transaction

что я сейчас делаю, это

start transaction 
   start db call
     do query()
   end db call
   start db call
     do count()
   end db call
end transaction

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Это классический вопрос.Краткий ответ - нет, так как вам нужно определить количество записей, тогда вам нужно извлечь только те записи, которые вы хотите для страницы.Я делал это раньше, используя тот же запрос Criteria, но выполняя следующие действия:

  1. Настройка полного запроса Criteria, за исключением сортировки, ограничения и смещения
  2. Добавьте Projections.rowCount() к запросу и выполните запрос, используя uniqueResult()
  3. Установите Projections на null
  4. Добавьте сортировку (addOrder), предел (setMaxResults) и смещение (setFirstResult)
  5. Запустите запрос еще раз, на этот раз с помощью list для получения набора результатов

Обратите внимание, что даже при работе внутри хранимого процесса вОракул, я видел опытных администраторов баз данных, делающих одно и то же.

1 голос
/ 27 июня 2011

Я действительно изучил это около года назад, и лучшее, что я придумал, - это выполнение обеих операций с базой данных в одной транзакции. Это по-прежнему два отдельных попадания в базу данных, но это устраняет несколько смущающие заголовки, такие как записи 1-50 из 45.

0 голосов
/ 27 июня 2011

Вопрос в том, можете ли вы сформулировать такой запрос в SQL?Возможно, вам удастся придумать какой-нибудь сумасшедший союз, который объединит счет и первую страницу результатов, но я сомневаюсь, что производительность будет лучше, чем два запроса, и нет, у hibernate не будет возможности автоматически отобразить это для вас..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...