2011-01-19 7 views
10

मुझे यह तालिका मिली है:हाइबरनेट के साथ, मैं एक टेबल से कैसे क्वेरी कर सकता हूं और मुख्य मूल्य जोड़ी आईडी> नाम के साथ हैशैप वापस कर सकता हूं?

table name : Account 
Fields : id (varchar), name(varchar), other fields... 

मैं इस तालिका को हाइबरनेट तंत्र (दूसरे कैश स्तर का उपयोग करने के लिए) से पूछना चाहता हूं। हाइबरनेट क्वेरी का परिणाम एक हैश मैप होना चाहिए जहां कुंजी फ़ील्ड आईडी है और जहां मान फ़ील्ड का नाम है।

मैं इसे एचक्यूएल के साथ कैसे लिख सकता हूं?

यदि मैं मानचित्र का उपयोग करता हूं, तो मैं केवल उपनाम का उपयोग कर सकता हूं और यदि मैं किसी ऑब्जेक्ट के साथ एक कन्स्ट्रक्टर का उपयोग करता हूं, तो मुझे परिणाम बदलना होगा हैमपैप जो समय लेने वाला है।

Example : 
Id | name | other fields 
1 Jerome ... 
2 Steve ... 
3 Nick ... 

क्वेरी का परिणाम एक हैशैप होना चाहिए:

1>Jerome 
2>Steve 
3>Nick 

धन्यवाद

उत्तर

11

यह प्रश्न पुराना है लेकिन यह अभी भी अन्य लोगों की सहायता कर सकता है। अब आप हाइबरनेट के साथ मानचित्र वापस करने के लिए एचक्यूएल का उपयोग कर सकते हैं। कुछ इस तरह का प्रयोग करें:

select new map(max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n) from Cat cat 

हाइबरनेट डॉक्स से: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select

+4

लगभग 1 वर्ष 1/2, मैं अपना स्वीकार्य उत्तर अपडेट करता हूं! यह वही था जो मुझे खोजा गया था। यह बहुत देर हो चुकी है लेकिन एक उपयोगी जानकारी है! –

5

मुझे लगता है कि सबसे करीब आप प्राप्त कर सकते हैं कि इस प्रश्न के उपयोग करने के लिए है:

Example : 
Id | name | other fields 
1 Jerome ... 
2 Steve ... 
3 Nick ... 

क्वेरी का परिणाम एक hashmap होना चाहिए

select id, name from Account 

जो आपको दो लंबाई सरणी का परिणाम सेट देगा। तुम इतनी तरह, मैन्युअल रूप से नक्शा बनाने के लिए होगा:

for(Object[] row : rs) { 
    map.put(row[0], row[1]); 
} 

ध्यान दें कि यह काफी हद तक दूसरे स्तर कैश पर ध्यान नहीं देगा और एक SQL क्वेरी में अनुवाद मिलता है।

0

पल खाता किसी भी गैर आलसी संघों कि लोड किया जाएगा नहीं है के लिए मान लिया जाये, तो निम्न बस, सबसे अच्छा आप प्राप्त करने के लिए जा रहे हैं है प्रदर्शन के लिहाज से:

List<Account> accounts = (List) session.createQuery("from Account").list(); 
for (Account account : accounts) map.put(account.getID(), account.getName()); 

यह हो सकता है "समय लेने वाली" हो, लेकिन ऐसा नहीं है कि हाइबरनेट किसी भी तरह से जादुई रूप से मानचित्र में प्रत्येक लौटाई पंक्ति डालने के चरण से बच सकता है।

दूसरे उत्तर के विपरीत, यह दूसरे स्तर के कैश से लाभान्वित होना चाहिए।

2

हाइबरनेट का डिफ़ॉल्ट इकाई मोड EntityMode.POJO है।

आप मानचित्र प्रारूप में क्वेरी आउटपुट पुनर्प्राप्त करने के लिए EntityMode.MAP इकाई मोड का उपयोग कर सकते हैं।

+0

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/persistent-classes। एचटीएमएल # लगातार-कक्षा-गतिशील मॉडल –

0

Hiii ...

कोड नीचे आप मदद कर सकता है।

Query query = session.createQuery("select id, name from table"); 
    List results = query.list(); 

परिणामों को प्रदर्शित करने के लिए वस्तुओं के रूप में काम करता है:

int i; 
    int j; 
    Object object = null; 
    for (i = 0; i < results.size(); i++) { 

     System.out.println("-------"); 
     Object[] obj = (Object[]) results.get(i); 
     for (j=0;j<obj.length;j++) 
     { 
      System.out.println(obj[j]); 
     } 
     System.out.println("-------"); 

    } 

संपादित करें: आपको लगता है कि नक्शे के रूप में वस्तुओं परिणाम और you'r किया उपयोग कर सकते हैं।

-1

डिफ़ॉल्ट इकाई नाम का उपयोग करने के पूर्णांक आप इकाई-नाम hbm.xml फ़ाइल पर लागू कर सकते हैं।

उदाहरण के लिए

इस का उपयोग करते हुए, मुख्य/मान जोड़े नक्शे को वापस देने का मतलब है कि हाइबरनेट।

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

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