Domanda

Ho un'applicazione Java EE e io uso Hibernate. Gli oggetti di dominio, ho cambiato la lista / ArrayList a Set / HashSet, perché è meglio usare set.

Ma nella mia implementazione Dao mi imbatto in 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;
}

Ecco ottengo un errore:

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

Cosa posso fare per evitare questo errore?

Grazie in anticipo e cordiali saluti.

È stato utile?

Soluzione

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

sess.createQuery("from Item").list(); restituirà una lista di array di elementi risultanti, se ne avete bisogno in Set si può fare come mostrato nel codice

Altri suggerimenti

  

Gli oggetti di dominio, ho cambiato la lista / ArrayList a Set / HashSet, perché è meglio usare set.

Non è "meglio" per uso Set, dipende interamente da quello che ti serve. Ma in ogni caso, il tipo di raccolta si usa nei vostri oggetti di dominio e il tipo di ritorno di Query#list() sono due cose indipendenti .

Personalmente, non posso dire che vedo molto valore nel convertire il risultato di una query in un Set (a parte mangiare più memoria), a meno che non si vuole esplicitamente rimuovere duplicati dai risultati della query ovviamente (ma in quel caso, vorrei sfidare le mappature).

Ora, se insistete, le varie implementazioni Set hanno un costruttore che prende un Collection (e la questione è essenzialmente un duplicato di Il modo più semplice per convertire un elenco per un set -? Java )

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top