hibernate-> arrayListをキャストすることはできません
-
29-09-2019 - |
質問
Java EEアプリケーションがあり、Hibernateを使用しています。ドメインオブジェクトは、セットを使用する方が良いため、リスト /アレイリストを設定 /ハッシュセットに変更しました。
しかし、私のDAOの実装では、問題に遭遇します。
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;
}
ここでエラーが発生します:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set
このエラーを回避するために何ができますか?
よろしくお願いします。よろしくお願いします。
解決
List<Item> list = sess.createQuery("from Item").list();
Set<Item> items = new HashSet<Item>(list);
sess.createQuery("from Item").list();
結果のアイテムの配列リストを返します。セットで必要な場合は、コードに表示されるように作成できます
他のヒント
ドメインオブジェクトは、セットを使用する方が良いため、リスト /アレイリストを設定 /ハッシュセットに変更しました。
使用する方が「より良い」わけではありません Set
, 、それはあなたが必要とするものに完全に依存します。とにかく、ドメインオブジェクトで使用するコレクションタイプとリターンタイプのタイプ Query#list()
それは 2つの無関係なこと.
個人的には、クエリの結果を変換する際に多くの価値があるとは言えません Set
(より多くの記憶を食べることは別として)、明示的に削除したい場合を除き クエリの結果から複製します もちろん(ただし、その場合、マッピングに挑戦します)。
さて、あなたが主張するなら、さまざまなものです Set
実装には、aを取るコンストラクターがあります Collection
(そして、質問は本質的に重複しています リストをセットに変換する最も簡単な方法は? - ジャワ).
所属していません StackOverflow