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对象,以删除重复数据?@H_301_5@
我知道我可以通过创建一个返回列表的设置来实现这一点,如下所示,但后来我将失去列表的排序顺序.而且我不想编写代码来对集合进行排序.@H_301_5@
Set<Employee> empSet = new HashSet<Employee>(result);
解决方法
我不认为可以使用基于javadoc的Criteria返回Set.但是,如果要删除重复数据,为什么不在现有条件中添加Projections.distinct(…)以删除重复项?
http://docs.jboss.org/hibernate/envers/3.6/javadocs/org/hibernate/criterion/Projections.html@H_301_5@
UPDATE@H_301_5@
例如,如果要对员工姓名(或某些标识符)应用SELECT DISTINCT以获取唯一员工的列表,则可以执行以下操作: – @H_301_5@
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.@H_301_5@