gpt4 book ai didi

java - 使用 hibernate Criteria 返回一个集合而不是列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:44 24 4
gpt4 key购买 nike

criteria = createCriteria("employee");  
criteria.add(Restrictions.eq("name", "John"));
criteria.addOrder(Order.asc("city"));
criteria.addOrder(Order.asc("state"));
List result = criteria.list();

此语句返回 Employee 对象的列表。我怎样才能让它返回一个 Set 的 Employee 对象,以便删除重复数据?

我知道我可以通过如下所示从返回的列表中创建一个集合来实现这一点,但那样我会丢失列表的排序顺序。而且我不想编写代码来对集合进行排序。

Set<Employee> empSet = new HashSet<Employee>(result); 

最佳答案

我认为根据 javadoc 使用 Criteria 返回 Set 是不可能的。但是,如果您想删除重复数据,为什么不将 Projections.distinct(...) 添加到您现有的 Criteria 以删除重复数据?

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 的使用。

关于java - 使用 hibernate Criteria 返回一个集合而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com