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