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 );
ここでの欠点は、すべての dog.id をメモリにロードしていることです。
これが必要になるシナリオ:
- 特定のクエリ結果 (何千もの) を行上のドットとして表示します。ラインとドットは、約 1 分ごとに更新されます。この視覚化により、検索クエリのランクが「リアルタイム」に更新されます