Могу ли я использовать HQL для получения индекса заказанного результата запроса?HQL возвращает индекс объекта в результате упорядоченного запроса?
Единственный способ, которым я знаю, это вернуть все результаты из базы данных, а затем перебрать все результаты.
Например, если:
<hibernate-mapping>
<class name="Dog" table="DOG">
<id name="id" type="int" column="DOG_id">
<meta attribute="scope-set">protected</meta>
<generator class="native"/>
</id>
<property name="age" type="int" />
<property name="name" type="string" />
</class>
</hibernate-mapping>
тогда эти типы запросов:
//determine where dog with id 43 is in the current search results for dogs ordered by age
Query dogQuery = sess.createQuery("select d.id from Dog as d order by d.age");
List<Dog> dogList = dogQuery.list();
int idx = dogList.indexOf(43);
или, более утонченный поиск по списку собак:
Query dogQuery = sess.createQuery("select d.id from Dog as d where (d.name='fluffy' OR d.age >= 3) order by d.age");
List<Dog> dogList = dogQuery.list();
int idx = dogList.indexOf(43);
Недостатком здесь что мы загружаем каждую собаку в память.
Сценарий, где я должен был бы это:
- отображения конкретного результата запроса (тысяч) в виде точки на линии. Линия и точка обновляются каждую минуту или около того. Эта визуализация дает обновления «реального времени» в ранге поискового запроса
Один сценарий, где мне это нужно: если мне нужно вернуться к правильной странице результатов для продукта, и каталог всегда меняется. – jedierikb
Даже если список ненормальный, я все равно не буду знать, какой индекс является тем, который я ищу, если я не проверю каждый элемент (побеждая лишнюю лень). (если я понимаю, что не-ленивый правильно). – jedierikb
«extra-lazy» означает, что при необходимости выбираются только элементы списка. http://www.hibernate.org/hib_docs/v3/reference/en-US/html_single/#performance-fetching-lazy , поэтому List.indexOf() должен работать, потому что поддержка PersistantList должна просто генерировать запрос, чтобы возвращать результат , – Pat