Hibernate->无法设置ArrayList
-
29-09-2019 - |
题
我有一个Java EE应用程序,我使用Hibernate。域对象,我将列表 / arrayList更改为设置 /哈希集,因为最好使用集合。
但是在我的DAO实施中,我遇到了一个问题:
public Set<Person> getAllPersons() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session sess = sessionFactory.getCurrentSession();
Transaction tx = sess.beginTransaction();
@SuppressWarnings("unchecked")
Set<Item> items = (Set<Item>) sess.createQuery("from Item").list();
tx.commit();
return items;
}
在这里,我有一个错误:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set
我该怎么做才能避免此错误?
预先感谢您和最诚挚的问候。
解决方案
List<Item> list = sess.createQuery("from Item").list();
Set<Item> items = new HashSet<Item>(list);
sess.createQuery("from Item").list();
将返回所得项目的数组列表,如果您在集合中需要它,则可以按照代码如图所示。
其他提示
域对象,我将列表 / arrayList更改为设置 /哈希集,因为最好使用集合。
使用不是“更好” Set
, ,这完全取决于您的需求。但是无论如何,您在域对象中使用的集合类型和返回类型 Query#list()
是 两件事.
就个人而言,我不能说我在将查询的结果转换为一个 Set
(除了多吃记忆之外),除非您明确想删除 从查询结果重复 当然(但是在这种情况下,我会挑战映射)。
现在,如果您坚持,各种各样的 Set
实现具有一个构造函数,可以 Collection
(问题本质上是 将列表转换为集合的最简单方法? -Java).
不隶属于 StackOverflow