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 )。