0

HQLを使用して、シーケンスされたオブジェクトの開始インデックスを検索したいと思います。

たとえば、次の永続化されたクラスがある場合:

<class name="Word">

    <id name="id" type="int">
        <meta attribute="scope-set">protected</meta>
        <generator class="native"/>
    </id>

    <many-to-one name="sentence" class="Sentence"/>

    <property name="word" type="string"/>

    <property name="num" type="integer"/>

</class>

<class name="Sentence">

    <id name="id" type="int">
        <meta attribute="scope-set">protected</meta>
        <generator class="native"/>
    </id>

    <set name="words" lazy="true">
        <one-to-many class="Word"/>
    </set>

</class>

そして、私は次の単語を文オブジェクトに永続化します。

WORD   NUM
---------- 
the    0 
cow    1 
jumped 2 
over   3 
the    4 
moon   5 
but    6 
the    7 
cow    8 
forgot 9 
her    10  
bell   11

「牛」を検索して、0と7を取得したいと思います。「牛がジャンプした」を検索すると、0のみが返されます。

私の現在のアプローチは反復検索です。最初の単語のインデックスをクエリしてから、そのインデックスを使用して、次の単語のインデックスが希望どおりかどうかを確認します。これは良いアプローチですか、それともすべてを1つのクエリで実行する方法がありますか?

4

1 に答える 1

0

このアプローチには何の問題もありません。反復クエリは、避けられない場合があります。

行番号を返すデータベースがあり、それを使用して複雑なクエリを作成できます。休止状態がこれをサポートしているとは思わない。(私は oracle、postgre >= 8.4 を知っています) 2 つのクエリを実行するよりもパフォーマンスが低下する可能性があります。

無限のクエリに遭遇したり、クエリの数が入力のサイズや既存のデータのサイズに比例して増加したりしないようにしてください。

于 2009-02-25T14:16:45.073 に答える