سؤال

لدي تطبيق Java EE وأستخدم Hibernate. كائنات المجال ، قمت بتغيير قائمة / arraylist إلى تعيين / hashset ، لأنه من الأفضل استخدام مجموعات.

لكن في تنفيذ 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(); سيعود قائمة صفيف للعناصر الناتجة ، إذا كنت في حاجة إليها في المجموعة ، يمكنك عملها كما هو موضح في الكود

نصائح أخرى

كائنات المجال ، قمت بتغيير قائمة / arraylist إلى تعيين / hashset ، لأنه من الأفضل استخدام مجموعات.

ليس من الأفضل استخدامها Set, ، يعتمد ذلك بالكامل على ما تحتاجه. ولكن على أي حال ، فإن نوع المجموعة الذي تستخدمه في كائنات المجال الخاصة بك ونوع الإرجاع Query#list() نكون شيئان غير ذوي صلة.

أنا شخصياً لا أستطيع أن أقول إنني أرى قيمة كبيرة في تحويل نتيجة الاستعلام إلى أ Set (بصرف النظر عن تناول المزيد من الذاكرة) ، إلا إذا كنت تريد إزالتها صراحة التكرار من نتائج الاستعلام بالطبع (ولكن في هذه الحالة ، أود تحدي التعيينات).

الآن ، إذا أصرت ، فإن المختلف Set التطبيقات لديها مُنشئ يأخذ ملف Collection (والسؤال هو في الأساس نسخة مكررة من أسهل طريقة لتحويل قائمة إلى مجموعة؟ - جافا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top