質問

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 (そして、質問は本質的に重複しています リストをセットに変換する最も簡単な方法は? - ジャワ).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top