हाइबरनेट ctiteria का उपयोग करके मैं एक वस्तु का चयन करना चाहता हूं और यह ऑब्जेक्ट्स की एक टोनी सूची से जुड़ा हुआ है। मैं डरावनी हाइबरनेट एन + 1 चुनिंदा समस्या से बचने के लिए इस सूची के माध्यम से पेजिंग करना चाहता हूंहाइबरनेट मानदंड एन + 1 अंक maxresults
यहां एक कामकाजी समाधान है जिसके लिए 10 मूल वस्तुओं के लिए डेटाबेस में 11 ट्रिप की आवश्यकता है।
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.SELECT);
List test = criteria.list();
और यहाँ एक समाधान है जो केवल एक एसक्यूएल बयान (हुर्रे) निष्पादित करता है लेकिन पृष्ठांकन संभाल सकते हैं यानी setMaxResults और setFirstResult पैरेंट ऑब्जेक्ट माँ (बू) पर सही नहीं हैं
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.JOIN);
List test = criteria.list();
इस तरह की तरह लगता है है एक आम आवश्यकता है लेकिन मैंने बिना किसी किस्मत के समाधान के लिए खोद दिया है।
कोई भी लेकर्स?
ग्रेट उत्तर। धन्यवाद और सम्मान। – jaseFace
मेरी इच्छा है कि मैं इसे एक से अधिक बार बढ़ा सकता हूं। चालाक कामकाज। – cdmckay
ग्रेट एंडवर; मेरे मामले में मुझे कई लोगों में शामिल होने के कारण दोहराया गया, इसलिए मैंने लाइन 5 पर प्रक्षेपण को '.setProjection (Projections.distinct (Projections.id()) के साथ बदल दिया)' –