2010-10-12 14 views
8

सेट करने के लिए नहीं डाला जा सकता है मेरे पास जावा ईई एप्लिकेशन है और मैं हाइबरनेट का उपयोग करता हूं। डोमेन ऑब्जेक्ट्स, मैंने सूची/ArrayList को सेट/हैशसेट में बदल दिया है, क्योंकि सेट्स का उपयोग करना बेहतर है।हाइबरनेट -> ArrayList को

लेकिन मेरे दाव कार्यान्वयन में मैं किसी समस्या का सामना:

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 

मैं इस त्रुटि से बचने के लिए क्या कर सकते हैं?

अग्रिम में धन्यवाद & बेस्ट विनर्ड्स।

+3

क्या आप वाकई जानते हैं कि आप जानते हैं कि सेट और सूची के बीच क्या अंतर है? क्योंकि सेट का उपयोग करने के लिए यह 'बेहतर' नहीं है। जब भी आप अपने संग्रह में किसी ऑब्जेक्ट का एक उदाहरण चाहते हैं, तो आप सेट्स का उपयोग करते हैं, जबकि आप सूची में एक ही ऑब्जेक्ट के कई उदाहरण प्राप्त कर सकते हैं। – LeChe

उत्तर

21
List<Item> list = sess.createQuery("from Item").list(); 
Set<Item> items = new HashSet<Item>(list); 

sess.createQuery("from Item").list(); जिसके परिणामस्वरूप मदों की एक सरणी सूची प्रदान करेगा, यदि आप इसे सेट में की जरूरत है आप इसे कर सकते हैं के रूप में कोड में दिखाया गया

+0

या डेटाबेस का पुनर्निर्माण करें जो – willcodejavaforfood

+0

मामूली समस्या नहीं हो सकता है, यह ' आइटम = नया हैशसेट (सूची) सेट होना चाहिए; '। इसके अलावा: +1 –

+0

"डेटाबेस को पुनर्निर्माण करें जो एक विकल्प नहीं हो सकता है" - यह कोई समझ नहीं आता है, 'क्वेरी.सूची()' हमेशा 'सूची' देता है: http://docs.jboss.org/hibernate/ स्थिर/कोर/जावाडोक/संगठन/हाइबरनेट/Query.html # सूची() –

3

The domain objects, I changed the List/ArrayList to Set/HashSet, because it is better to use Sets.

यह नहीं "बेहतर" Set उपयोग करने के लिए है, यह पूरी तरह से निर्भर है आपको क्या चाहिए लेकिन वैसे भी, संग्रह प्रकार जो आप अपने डोमेन ऑब्जेक्ट्स में उपयोग करते हैं और Query#list() का रिटर्न प्रकार दो असंबंधित चीजें हैं।

निजी तौर पर

, मैं नहीं कह सकता कि मैं परिणाम (अलावा अधिक स्मृति खाने से) एक Set में एक प्रश्न के परिवर्तित करने में ज्यादा मूल्य देखते हैं, जब तक आप स्पष्ट जाहिर है duplicates from query results (लेकिन इस मामले में निकालना चाहते हैं, मैं मैपिंग को चुनौती देगा)।

अब, अगर आप जोर देते हैं, विभिन्न Set कार्यान्वयन एक निर्माता है कि एक Collection लेता है (और प्रश्न अनिवार्य रूप से Easiest way to convert a List to a Set? - Java का डुप्लिकेट है)।

+0

जब मुझे जेपीए/एचएसक्यूएल के साथ मदद की ज़रूरत है तो आप कहीं भी नहीं दिखेंगे, लेकिन आप दिखाई देते हैं! अपमानजनक :) – willcodejavaforfood

संबंधित मुद्दे