簡體   English   中英

使用hibernate Criteria返回set而不是list

[英]Return a set instead of list with hibernate Criteria

criteria = createCriteria("employee");  
criteria.add(Restrictions.eq("name", "John"));  
criteria.addOrder(Order.asc("city"));
criteria.addOrder(Order.asc("state"));
List result = criteria.list();

此語句返回Employee對象的列表。 如何讓它返回一Set Employee對象,以刪除重復數據?

我知道我可以通過創建一個返回列表的設置來實現這一點,如下所示,但后來我將失去列表的排序順序。 而且我不想編寫代碼來對集合進行排序。

Set<Employee> empSet = new HashSet<Employee>(result); 

我不認為可以使用基於javadoc的Criteria返回Set 但是,如果要刪除重復數據,為什么不在現有Criteria添加Projections.distinct(...)以刪除重復項?

http://docs.jboss.org/hibernate/envers/3.6/javadocs/org/hibernate/criterion/Projections.html

UPDATE

例如,如果要對員工姓名(或某些標識符)應用SELECT DISTINCT以獲取唯一員工列表,則可以執行以下操作: -

List result = session.createCriteria("employee")
            .setProjection(Projections.distinct(Projections.property("name")))
            .add(Restrictions.eq("name", "John"))
            .addOrder(Order.asc("city"))
            .addOrder(Order.asc("state"))
            .list();

這樣,您根本不需要擔心使用Set

正如評論和javadoc建議的那樣,您必須從Criteria返回List 因此,您唯一的選擇是在事后刪除唯一身份。 正如KepaniHaole所說,如果你想保留訂單,你應該使用LinkedHashSet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM