Java – Return a set instead of list with hibernate Criteria


criteria = createCriteria("employee");  
criteria.add(Restrictions.eq("name", "John"));  
List result = criteria.list();

This statement returns a list of Employee objects. How can I make it return a Set of Employee objects instead, in order to remove duplicate data?

I understand I can achieve this by creating a set out of the returned list like below, but then I would lose the sorting order of the list. And I don't want to have to write code to sort the set.

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

Best Solution

I don't think it's possible to return a Set using Criteria based on the javadoc. However, if you want to remove duplicate data, why don't add a Projections.distinct(...) to your existing Criteria to remove the duplicates?


For example, if you want to apply a SELECT DISTINCT on the employee name (or some identifier(s)) to get a list of unique employees, you can do something like this:-

List result = session.createCriteria("employee")
            .add(Restrictions.eq("name", "John"))

This way, you don't really need to worry about using Set at all.