Hibernate – > ArrayList不能转换为Set

我有一个Java EE应用程序,我使用Hibernate。 域对象,我将List / ArrayList更改为Set / HashSet,因为最好使用Sets。

但是在我的Dao实现中我遇到了一个问题:

public Set getAllPersons() { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session sess = sessionFactory.getCurrentSession(); Transaction tx = sess.beginTransaction(); @SuppressWarnings("unchecked") Set items = (Set) sess.createQuery("from Item").list(); tx.commit(); return items; } 

在这里我收到一个错误:

 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set 

我该怎么做才能避免这个错误?

提前谢谢你和最诚挚的问候。

 List list = sess.createQuery("from Item").list(); Set items = new HashSet(list); 

sess.createQuery("from Item").list(); 将返回结果项的数组列表,如果您需要它,请在代码中显示它

域对象,我将List / ArrayList更改为Set / HashSet,因为最好使用Sets。

使用Set并不“更好”,它完全取决于你需要什么。 但无论如何,您在域对象中使用的集合类型和Query#list()的返回类型是两个不相关的东西

就个人而言,我不能说我看到将查询结果转换为Set (除了吃更多内存)有很大价值,除非你明确想要从查询结果中删除重复 (当然,在这种情况下,我会挑战映射)。

现在,如果你坚持,各种Set实现都有一个构造函数,它接受一个Collection (这个问题基本上是将List转换为Set的最简单方法的重复? – Java )。