2009-11-12 8 views
5

मैं एक प्रश्न करता हूं जो संस्थाओं की एक सूची देता है। कैसे मैं एक से संस्थाओं को पुनः प्राप्त कर सकते हैं:हाइबरनेट: मैं अपनी इकाइयों को स्क्रॉल करने योग्य रीसेट से कैसे प्राप्त करूं?

Session s = ....; 
Query q = s.createQuery("....") # returns 100000s rows 
ScrollableResults sr = q.scroll(); 
sr.scroll(45999); # just a number 
Employee employee = ??? 

मैं कोड की अंतिम पंक्ति में एक कर्मचारी कैसे मिलता है

उत्तर

2

यहाँ एपीआई के लिए एक लिंक दिया गया है: ScrollableResults

get() वीं के बाकी आरंभ के बिना पूरे वर्तमान पंक्ति, get(index) रिटर्न index स्थान पर आपत्ति रिटर्न उन्हें। सुविधा का एक गुच्छा getXXX() विधियों भी हैं जो परिणाम दिए गए प्रकार का परिणाम देते हैं।

+1

यदि आप एक उदाहरण प्रदान करते हैं तो यह पोस्ट अधिक उपयोगी होगी। उदाहरण के लिए, "पूरी वर्तमान पंक्ति" कैसा दिखती है यदि आप ग्राहक प्राप्त कर रहे थे? यदि ग्राहक के पास दो फ़ील्ड, नाम और आईडी हैं, तो मुझे उम्मीद है कि [0] नाम प्राप्त करें और [1] आईडी बनें। लेकिन ऐसा नहीं है, मैं [0] ग्राहक हूं जो मैं बता सकता हूं। – KyleM

0

बस अन्य उत्तरों को बेहतर बनाने के लिए, आपके लिए इकाई रूपांतरण करता है हालांकि यह तुरंत Javadocs से स्पष्ट नहीं है।

जैसा कि @ बोझो कहते हैं, sr.get() को कॉल करना वर्तमान स्थान पर इकाई को वापस कर देगा, लेकिन एक सरणी में लपेटा जाएगा। ScrollableResultsImpl के लिए कोड को देख में वर्तमान पंक्ति के परिणाम के साथ सेट है:

if (result != null && result.getClass().isArray()) { 
     currentRow = (Object[]) result; 
    } else { 
     currentRow = new Object[] { result }; 
    } 

तो ScrollableResults.get() हमेशा परिणामों की एक सरणी देता है और यदि आपकी इकाई नहीं एक सरणी है, यह get()[0] पर किया जाएगा।

तो, अपने कोड के साथ आप की तरह कुछ करना होगा:

while (sr.next()) { 
    // get the entity which is the first element in an Object[] 
    Employee employee = sr.get()[0]; 
    ... 
} 
0

संस्थाओं प्राप्त करने के लिए सबसे आसान तरीका है वस्तु के लिए जो भी आप आपत्ति कास्ट करने के लिए किया जाएगा चाहते हैं: उदाहरण के लिए:

ScrollableResults sr = q.scroll(); 
while (sr.next()) { 
    CustomObject object = (CustomObject) sr.get()[0]; // Now CustomObject will have all the properties mapped 
} 

यह सभी परिदृश्यों के लिए बिल्कुल सही काम करता है।

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