我有一个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).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top