Hibernate → ArrayList не может быть преобразован в Set
-
29-09-2019 - |
Вопрос
У меня есть приложение Java EE, и я использую Hibernate.Объекты домена я изменил List/ArrayList на Set/HashSet, потому что лучше использовать Sets.
Но в моей реализации 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();
Вернет список ассигновок результирующих элементов, если вам это нужно, вы можете сделать его, как показано в коде
Другие советы
Объекты домена я изменил List/ArrayList на Set/HashSet, потому что лучше использовать Sets.
Не «лучше» использовать Set
, это полностью зависит от того, что вам нужно.Но в любом случае тип коллекции, который вы используете в своих объектах домена, и тип возвращаемого значения Query#list()
являются две несвязанные вещи.
Лично я не могу сказать, что вижу большую ценность в преобразовании результата запроса в Set
(кроме потребления большего количества памяти), если только вы явно не хотите удалить дубликаты из результатов запроса конечно (но в таком случае я бы оспорил сопоставления).
Теперь, если вы настаиваете, различные Set
реализации имеют конструктор, который принимает Collection
(и вопрос по сути является дубликатом Самый простой способ преобразовать список в набор?- Джава).