Sus*_*sie 7 java database hibernate list set
criteria = createCriteria("employee");
criteria.add(Restrictions.eq("name", "John"));
criteria.addOrder(Order.asc("city"));
criteria.addOrder(Order.asc("state"));
List result = criteria.list();
Run Code Online (Sandbox Code Playgroud)
该语句返回一个Employee对象列表.我怎样才能让它返回一个SetEmployee对象,以便删除重复的数据?
我知道我可以通过创建一个返回列表的设置来实现这一点,如下所示,但是我会丢失列表的排序顺序.而且我不想编写代码来对集合进行排序.
Set<Employee> empSet = new HashSet<Employee>(result);
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个可以返回Set使用Criteria基于javadoc的.但是,如果要删除重复数据,为什么不在Projections.distinct(...)现有内容中添加一个以删除重复数据Criteria?
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();
Run Code Online (Sandbox Code Playgroud)
这样,您根本不需要担心使用Set.
正如注释和javadoc所建议的那样,您必须List从Criteria返回 a 。因此,您唯一的选择是事后删除唯一项。正如 KepaniHaole 所说,如果你想保留顺序, 你应该使用LinkedHashSet 。