2012-07-17 18 views
6

में सभी वस्तुओं की आईडी प्राप्त करें मैं इस तरह एक वर्ग है। मैं इसे कई तरीके की कोशिश की है, हमेशा एक ही त्रुटि प्राप्त:एक सूची

java.lang.String cannot be cast to java.util.Collection 

बातें मैं कोशिश की है में से कुछ:

def ids = Foo.findAllByBarInList(bars)*.id 
def ids = Foo.findAllByBarInList(bars).collect{ it.id } 
def ids = Foo.findAllByBarInList(bars).collect{ it -> it?.id } 

अद्यतन:

मैं इतना split साथ bars बना रही थी यह एक सरणी थी, सूची नहीं। उसने मुझे फेंक दिया क्योंकि Foo.findAllByBarInList(bars) ने मेरी Foo ऑब्जेक्ट्स को ठीक कर दिया, केवल तभी जब मैंने आईडी एकत्र करने की कोशिश की तो यह असफल रहा। अब मैं barstokenize के साथ बना हूं और सब ठीक है।

+0

मैं क्योंकि दोनों 'collect' विधि और प्रसार ऑपरेटर' * .' ग्रूवी में आधारित हैं वापस इस सवाल का ग्रूवी टैग लगाया। – ubiquibacon

+0

क्या आप वाकई जिस सूची की जांच कर रहे हैं वह एक सूची के रूप में सही तरीके से स्थापित है? 'Def ids = Foo.findAllByBarInList (बार) *। Id' का उपयोग करना मेरे लिए काम करता है। – Kelly

+2

ग्रेल्स ग्रेवॉवी का उपयोग करने के बाद से मैं ग्रोवी टैग बंद कर दूंगा, इसलिए यह जरूरी नहीं है, और यह ग्रेल्स के भीतर ग्रोवी का उपयोग है, न कि ग्रोवी-विशिष्ट प्रश्न। एक ग्रोवी विशेषज्ञ जिसे Grails के साथ कोई अनुभव नहीं है, आपकी मदद करने में सक्षम नहीं होगा। इसी तरह आप जावा, गोरम, हाइबरनेट, स्प्रिंग, प्रोग्रामिंग टैग को छोड़ सकते हैं;) –

उत्तर

12

कि जब तक मेरे लिए काम करता bars के रूप में एक सूची

def bars = ['bar1', 'bar3'] 
def ids = Foo.findAllByBarInList(bars)*.id 

है लेकिन अगर सभी आप चाहते हैं id क्षेत्र है यह एक बेकार डेटाबेस से पूरे डोमेन वर्ग उदाहरणों को खींचने के लिए है। अभी के लिए सिर्फ एक फ़ील्ड है, लेकिन व्यवहार में यह एक बड़ी मेज होगी। तो मैं एक HQL क्वेरी का उपयोग करेंगे:

def ids = Foo.executeQuery(
    'select f.id from Foo f where f.bar in (:bars)', 
    [bars: bars]) 
संबंधित मुद्दे