Hibernate -> Arraylist kann nicht auf Set gegossen werden
-
29-09-2019 - |
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.
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 )