使用hibernate Criteria返回set而不是list

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)

lim*_*imc 8

我不认为这是一个可以返回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.


Dan*_*lan 3

正如注释和javadoc所建议的那样,您必须ListCriteria返回 a 。因此,您唯一的选择是事后删除唯一项。正如 KepaniHaole 所说,如果你想保留顺序, 你应该使用LinkedHashSet 。