Hibernate -> ArrayList cannot be cast to Set
Ich habe eine Java EE-Anwendung und verwende ich Hibernate. Die domain-Objekte, ich habe die List /ArrayList-Set /HashSet, weil es besser ist die Verwendung von Sets.
Aber in meiner Dao-Implementierung, die ich laufen 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;
}
Hier bekomme ich eine Fehlermeldung:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set
Was kann ich tun um diesen Fehler zu vermeiden?
Danke im Voraus & Beste Grüße.
- Sind Sie sicher, dass Sie wissen, was der Unterschied zwischen einem Satz und einer Liste ist? Denn in keiner Weise ist es 'besser' zu verwenden, ein Satz. Verwenden Sie Sätze, wenn Sie möchten, eine einzelne Instanz von einem Objekt in Ihrer Sammlung, während Sie können mehrere Instanzen des gleichen Objekts in einer Liste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sess.createQuery("from Item").list();
gibt eine array Liste der resultierenden Elemente, wenn Sie es Einstellen, können Sie machen es so wie im codeSet<Item> items = new HashSet<Item>(list);
. Ansonsten: +1Query.list()
immer zurückList
: docs.jboss.org/hibernate/stable/core/javadoc/org/hibernate/...Es ist nicht "besser" zu verwenden
Set
, es hängt ganz davon ab, was Sie brauchen. Aber trotzdem, der Typ der Sammlung, die Sie in Ihrem domain-Objekten und der RückgabetypAbfrage#list()
sind zwei voneinander unabhängige Dinge.Persönlich, ich kann nicht sagen, dass ich viel Wert bei der Umwandlung eines Abfrageergebnisses in ein
Set
(abgesehen vom Essen, mehr Speicher), es sei denn, Sie explizit entfernen möchten Duplikate in Abfrage-Ergebnissen natürlich (aber in diesem Fall, würde ich die Herausforderung des mappings).Nun, wenn Sie darauf bestehen, die verschiedenen
Set
Implementierungen einen Konstruktor, eineCollection
(und die Frage ist im wesentlichen ein Duplikat der Einfachste Weg zu konvertieren eine Liste zu einem Set? - Java).