2012-02-07 9 views
13

क्या यह संभव है, मानदंडों के साथ grails पूछताछ और सूचियों की सूची के बजाय नक्शे की एक सूची प्राप्त करने के लिए? मैं परिणामों में कॉलम नामों को फिर से 'एसोसिएटिव सरणी' के साथ काम करने के लिए संख्यात्मक सरणी ऑफसेट के साथ काम करना चाहता हूं। मैं वर्तमान की तरहGrails मानदंडों के साथ पूछताछ: कॉलम के साथ एक नक्शा वापस कैसे प्राप्त करें?

def topFiveUsers = BlogEntry.createCriteria().list { 
     projections { 
      count('id') 
      groupProperty('author') 
     } 
     maxResults 5 
    } 

कुछ कौन सा [[123, app.User:1][111, app.User:2][...]...] में परिणाम है, यानि कि सूचियों की एक सूची है। मुझे [[posts:123, author: app.User:1][posts: 111, author app.User:2][...]...] जैसे कुछ चाहिए।

हमेशा की तरह: सहायता की अत्यधिक सराहना की जाती है!

उत्तर

2
def topFiveList = [] 
topFiveUsers.each { rec -> 
    topFiveList << [posts: rec[0], author: rec[1]] 
} 
2
def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] } 
+0

उत्तर के लिए धन्यवाद। बेशक मैं बाद में परिणाम बदल सकता हूं - यही वह क्षण है जो मैं कर रहा हूं। फिर फिर मैं परिणाम सेट पोस्टप्रोसेसिंग के ओवरहेड को छोड़ना चाहता हूं। मुझे लगता है कि हाइबरनेट कोड में कहीं भी वही परिवर्तन होता है ... – fluxon

+0

पोस्ट करने के कुछ ही समय बाद, यह मेरे लिए हुआ कि आपको दो-चरणीय समाधान में रूचि नहीं थी। –

+0

कोई चिंता नहीं! वैसे भी आपके समर्थन के लिए धन्यवाद! से बस महान है! – fluxon

30

उपयोग resultTransformer()। पैरामीटर का उपयोग CriteriaSpecification.ALIAS_TO_ENTITY_MAP
इस विषय पर दस्तावेज़ और उदाहरण दुर्लभ हैं। लेकिन यहां एक उदाहरण है:

import org.hibernate.criterion.CriteriaSpecification 

BlogEntry.withCriteria { 
    maxResults 5 
    resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP) 
    projections { 
    count('id', 'total') 
    groupProperty('author', 'author') 
    }  
} 

ध्यान दें कि सभी अनुमानों के लिए उपनाम आवश्यक है। अन्यथा, परिणामी मानचित्र में नल होते हैं।

+0

शानदार और सुरुचिपूर्ण। सर्गेई बहुत बहुत धन्यवाद। –

+0

उत्कृष्ट ....... बहुत बहुत धन्यवाद .... – akiong

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