2011-11-14 79 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,當您將它們放入vanilla HashSet時,順序也不會保留。

如果您不想按順序返回項目,則應考慮爲您的狀態對象實施Comparable界面,或者實施將查看狀態的Name屬性以評估順序的Comparator