2011-11-14 4 views
0

私はHibernateとJPAを使用しています。私は現在、リバース・エンジニアリングされたDAOを持っています。これは私に50州すべてのリストを与えます。ドメインオブジェクト内のセットを注文する

各状態内にはアイテムのリストがあります。 Set<Items>

Itemsクラスにはnameというプロパティがあります。

私はlist of Statesを返す必要があります - 順序は関係ありません。しかし、州内の各項目はアルファベット順に返される必要がありますか?

ここにDAOがあります。

public List<State> findAll() { 
     EntityManagerHelper 
       .log("finding all State instances", Level.INFO, null); 
     try { 
      final String queryString = "select model from State model"; 
      Query query = getEntityManager().createQuery(queryString); 
      return query.getResultList(); 
     } catch (RuntimeException re) { 
      EntityManagerHelper.log("find all failed", Level.SEVERE, re); 
      throw re; 
     } 
    } 

そしてここで状態が

public class State implements java.io.Serializable { 
    private Set<Item> items= new HashSet<Item>(0); 
} 

であり、これは名前と呼ばれるアイテムのプロパティで注文する必要があります。

+0

はHashSetのを注文されていません。で。すべて。リストを使用する – DataNucleus

答えて

0

JPA注釈javax.persistence.OrderByを使用することができます。例えば

public class State { 
    private Set<Item> items= new HashSet<Item>(0); 

    @OneToMany(mappedBy = "state") 
    @OrderBy("name") 
    public Set<Item> getItems() { 
     return items; 
    } 

    // Setter 
} 
+0

HashSetは順序を保持しないことに加えて(HashSetのjavadocを参照してください)、そのようなアクションは無駄かもしれません。 – DataNucleus

2

一般に、Setは順序付けられていません。 LinkedHashSetのような決定的な反復順序を与える実装がありますが、順序を維持する場合はリストを使用する必要があります。値が順序付けられた形式でJavaに返されたとしても、それらをバニラのHashSetに入れるとその順序は保持されません。

アイテムを順番に返送したくない場合は、StateオブジェクトのComparableインターフェイスを実装するか、または評価するステートのNameプロパティを調べるComparatorを実装する必要があります。

関連する問題