加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用hibernate Criteria返回set而不是list

发布时间:2020-12-15 00:36:58 所属栏目:Java 来源:网络整理
导读:criteria = createCriteria("employee"); criteria.add(Restrictions.eq("name","John")); criteria.addOrder(Order.asc("city"));criteria.addOrder(Order.asc("state"));List result = criteria.list(); 此语句返回Employee对象的列表.如何让它返回一组Emp
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<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

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();

这样,您根本不需要担心使用Set.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读