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,以便删除重复的数据?
我知道我可以像下面这样从返回的列表中创建一个集合来实现这一点,但那样我就会失去列表的排序顺序。并且我不想编写代码来对集合进行排序。
Set<Employee> empSet = new HashSet<Employee>(result); 发布于 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以获取唯一员工的列表,则可以执行以下操作:-
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了。
发布于 2013-10-26 04:46:04
正如评论和javadoc所建议的,您必须从Criteria返回一个List。因此,您唯一的选择就是事后删除唯一性。正如KepaniHaole所说,如果你想保持秩序,你应该使用LinkedHashSet。
https://stackoverflow.com/questions/19599062
复制相似问题