Frage

Ich habe eine Anwendung Java EE und ich Hibernate verwenden. Die Domain-Objekte, Ich habe die Liste / Arraylist Set / HashSet, weil es besser ist, Sätze zu verwenden.

Aber in meinem Dao Implementierung Ich laufe in ein Problem:

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

ich einen Fehler Hier erhalten:

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

Was kann ich tun, um diesen Fehler zu vermeiden?

Vielen Dank im Voraus & Mit freundlichen Grüßen.

War es hilfreich?

Lösung

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

sess.createQuery("from Item").list(); wird eine Array-Liste der resultierenden Produkte zurückgeben, wenn Sie es im Set müssen Sie es wie im Code gezeigt machen

Andere Tipps

  

Die Domain-Objekte, Ich habe die Liste / Arraylist Set / HashSet, weil es besser ist, Sätze zu verwenden.

Es ist nicht „besser“ zu verwenden Set, hängt es ganz auf das, was Sie brauchen. Aber wie auch immer, die Sammlung Typ, den Sie in Ihrem Domain-Objekte verwenden und der Rückgabetyp von Query#list() sind zwei unabhängige Dinge .

Ich persönlich kann nicht sagen, dass ich bei der Umwandlung das Ergebnis einer Abfrage in eine Set viel Wert sehen (abgesehen von mehr Speicher zu essen), es sei denn, Sie explizit entfernen möchten Duplikate von Abfrageergebnissen natürlich (aber in diesem Fall würde ich die Zuordnungen in Frage stellen).

Nun, wenn Sie darauf bestehen, das verschiedene Set Implementierungen hat einen Konstruktor, der eine Collection nimmt (und die Frage ist im wesentlichen ein Duplikat Die einfachste Weg, um eine Liste zu einem Set zu konvertieren - Java )

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top