2009-09-15 6 views
16

を注文する代わりに、インデックスフィールドで休止状態で、リストのマッピング。私はSetListに置き換えたいと思います。コレクションを変更する:はこの作品

 <list name="trips" cascade="all" order-by="scheduledDate"> 
      <key column="trainId"/> 
      <one-to-many class="Trip"/> 
     </list> 

<index/>が必要になります。 の注文は、で指定されているため、私はテーブルにインデックスを追加したくありません。

これはどのようにして行うことができますか?または、私はちょうどHibernateからSetを取得し、それをコードで自分自身でソートする必要がありますか?すでにDBで注文している場合は不要です。

答えて

31

実際には、これは<bag>,<set>または<map>マッピングで実行できます。 <bag>java.util.Listセマンティクスを使用しますが、要素インデックスは保持しません。それはorder-by属性だ指定することで、その要素は、SELECTの一部として注文されます:order-by属性は名(複数可)、いないプロパティ名を指定する必要があることを

<bag name="trips" cascade="all" order-by="scheduledDate"> 
    <key column="trainId"/> 
    <one-to-many class="Trip"/> 
</bag> 

注意。上記はjava.util.Listにマッピングできますが、<set>マッピングを使用してjava.util.Setと同じことができます。

詳細:-)コンパレータのための必要はありません、感謝here

+0

優れていません! :-) – Magnar

+2

投稿されたリンクが404になりました。http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html#collections-sorted – Saheed

0

Listを使用すると、自然に注文されたアイテムのコレクションを保存する正しい方法ではないことに気付きました。

SortedSetTreeSetのような)をComparatorと使用することです。

関連する問題