Hibernate - > ArrayList не может быть приведен к установке

у меня есть приложение Java EE, и я использую Hibernate. В объектах домена я изменил список / ArrayList на Set/HashSet, потому что лучше использовать наборы.

но в моей реализации 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

что я могу сделать, чтобы избежать этой ошибки?

спасибо заранее и наилучшими пожеланиями.

2 ответов


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

sess.createQuery("from Item").list(); вернет список массива результирующих элементов, если вам это нужно в наборе, вы можете сделать это, как показано в коде


объекты домена, я изменил список / ArrayList на Set / HashSet, потому что лучше использовать наборы.

это не "лучше" использовать Set, Это целиком зависит от того, что вам нужно. Но в любом случае, тип коллекции, который вы используете в своих объектах домена, и тип возврата Query#list() are две несвязанные вещи.

лично я не могу сказать, что вижу большую ценность в преобразовании результата запроса в Set (помимо еды больше памяти), если вы явно не хотите удалить повторяющиеся значения из результатов запроса конечно (но в этом случае я бы оспорил сопоставления).

теперь, если вы настаиваете, различные Set реализации имеют конструктор, который принимает Collection (и вопрос по существу является дубликатом самый простой способ преобразовать список в набор? - Java).