2011-10-27 29 views
22

साथ क्वेरी से परिणाम प्राप्त करने के लिए अपने प्रश्न की तरह, एक वर्ग शामिल हैं:हाइबरनेट: कैसे कई वर्गों

query = session.createQuery("select u from User as u"); 
queryResult = query.list(); 

तो मैं इसे पुनरावृति, जहां queryResultUser वर्ग की एक वस्तु है।

तो क्वेरी से परिणाम कैसे प्राप्त करें जिसमें एक से अधिक कक्षाएं हों? उदाहरण के लिए:

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1 
+1

सर्वश्रेष्ठ उत्तर यहां है http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-runtime –

उत्तर

25
for (Object[] result : query.list()) { 
    User user = (User) result[0]; 
    Group group = (Group) result[1]; 
} 
+2

धन्यवाद! लेकिन 'सूची ' होना चाहिए – yaya

5

आप ऐसा कर सकते हैं tuples का उपयोग कर मुझे विश्वास है, लेकिन अधिक महत्वपूर्ण, यदि आपका समूह और उपयोगकर्ता कि क्वेरी की तरह संबंधित है उपयोगकर्ता सुझाव देने के लिए एक समूह क्षेत्र (में ग्रुप का उपयोग नहीं करते होना चाहिए लगता है आपके उपयोगकर्ता वर्ग, हाइबरनेट को आपके लिए इसे हल करना चाहिए)। अगर ऐसी बात है तो आप बस इसे का उपयोग select u from User u join fetch u.group g where g.groupId = :id (तब आईडी query.setParameter(1, id); का उपयोग कर सेट क्वेरी कर सकते हैं।

कि क्वेरी में fetch कीवर्ड यह एक उत्सुक लोड तो दोनों वस्तुओं हाइबरनेट को लौटा दी जाएगी जो आप के लिए उपयोगकर्ता वस्तु वापस आ जाएगी बनाता है जब आप विभिन्न इकाइयों का चयन करें। user.getGroup का उपयोग कर पहुंचें समूह वस्तु()।

+0

मुझे लगता है कि यह सही तरीका है, लेकिन मेरे पास कुछ पार्सर था त्रुटियां: "सभी" की उम्मीद है, 'शामिल' और "द्वारा" की अपेक्षा की जाती है, ' – yaya

+0

' कहां मिलती है, यह मेरी गलती 'शामिल होने' की बजाय 'fetch' में शामिल है। इसे अभी सुधारना – Thor84no

3

जब आप एक इकाई का चयन करें, query.list() अपने संस्थाओं युक्त Object के List वापस आ जाएगी।

, 01,के List वापस करेगा। सरणी का प्रत्येक तत्व एक अलग इकाई का प्रतिनिधित्व करता है।

और पढ़ें यहाँ: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

0

इसके अलावा, आप एक निर्माता एक वस्तु बना सकते हैं और वापस कर सकते हैं:

मान लिया जाये कि वर्ग परिवार के लिए एक उपयुक्त निर्माता है - एक वास्तविक typesafe जावा वस्तु के रूप में:

select new Family(mother, mate, offspr) 
from DomesticCat as mother 
join mother.mate as mate 
left join mother.kittens as offspr 

या एक सूची:

select new list(mother, offspr, mate.name) 
from DomesticCat as mother 
inner join mother.mate as mate 
left outer join mother.kittens as offspr 

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

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