首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hibernate条件返回set而不是list

使用hibernate条件返回set而不是list
EN

Stack Overflow用户
提问于 2013-10-26 04:39:59
回答 2查看 8.1K关注 0票数 7
代码语言:javascript
复制
criteria = createCriteria("employee");  
criteria.add(Restrictions.eq("name", "John"));  
criteria.addOrder(Order.asc("city"));
criteria.addOrder(Order.asc("state"));
List result = criteria.list();

此语句返回Employee对象的列表。我如何让它返回Employee对象的Set,以便删除重复的数据?

我知道我可以像下面这样从返回的列表中创建一个集合来实现这一点,但那样我就会失去列表的排序顺序。并且我不想编写代码来对集合进行排序。

代码语言:javascript
复制
Set<Employee> empSet = new HashSet<Employee>(result); 
EN

回答 2

Stack Overflow用户

发布于 2013-10-26 04:51:29

我不认为使用基于javadoc的Criteria返回Set是可能的。但是,如果您想删除重复的数据,为什么不向现有的Criteria添加Projections.distinct(...)来删除重复的数据呢?

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

更新

例如,如果您希望对员工姓名(或某个标识符)应用SELECT DISTINCT以获取唯一员工的列表,则可以执行以下操作:-

代码语言:javascript
复制
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了。

票数 8
EN

Stack Overflow用户

发布于 2013-10-26 04:46:04

正如评论和javadoc所建议的,您必须从Criteria返回一个List。因此,您唯一的选择就是事后删除唯一性。正如KepaniHaole所说,如果你想保持秩序,你应该使用LinkedHashSet

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19599062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档