Hibernate -> لا يمكن إلقاء ArrayList لتعيين
-
29-09-2019 - |
سؤال
لدي تطبيق 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
(والسؤال هو في الأساس نسخة مكررة من أسهل طريقة لتحويل قائمة إلى مجموعة؟ - جافا).