Pregunta

Tengo una aplicación Java EE y uso de Hibernate. Los objetos de dominio, que cambiaron la Lista / ArrayList a Set / HashSet, porque es mejor utilizar conjuntos.

Pero en mi aplicación Dao me encuentro con un problema:

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;
}

A continuación, me sale un error:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set

¿Qué puedo hacer para evitar este error?

Gracias de antemano y un saludo.

¿Fue útil?

Solución

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

sess.createQuery("from Item").list(); devolverá una lista variedad de artículos resultantes, si lo necesita en el juego se puede hacer como se muestra en el código

Otros consejos

  

Los objetos de dominio, he cambiado la Lista / ArrayList a Set / HashSet, porque es mejor utilizar conjuntos.

No es "mejor" para su uso Set, que depende enteramente de lo que necesita. Pero de todos modos, el tipo de colección que utiliza en sus objetos de dominio y el tipo de retorno de Query#list() son dos cosas no relacionadas .

En lo personal, no puedo decir que veo mucho valor en convertir el resultado de una consulta en un Set (aparte de comer más memoria), a menos que desee de forma explícita para eliminar duplicados de los resultados de la consulta por supuesto (pero en ese caso, me gustaría desafiar a las asignaciones).

Ahora, si insiste, las diversas implementaciones Set tienen un constructor que toma un Collection (y la pregunta es esencialmente un duplicado de manera más fácil de convertir una lista de una serie -? Java)

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top