का उपयोग करके पेजिनेशन के लिए कुल पंक्ति गणना मैं अपने सिस्टम में एक इकाई के लिए "उन्नत खोज" कार्यक्षमता को कार्यान्वित कर रहा हूं जैसे कि उपयोगकर्ता कई स्थितियों (ईक, एन, gt, lt, आदि) का उपयोग करके उस इकाई को खोज सकता है। इस इकाई के गुणों पर। मैं जेपीए के मानदंड एपीआई का उपयोग गतिशील रूप से मानदंड क्वेरी उत्पन्न करने के लिए कर रहा हूं और फिर पेजिंग के समर्थन के लिए setFirstResult()
& setMaxResults()
का उपयोग कर रहा हूं। सभी इस बिंदु तक ठीक थे लेकिन अब मैं परिणाम ग्रिड पर परिणामों की कुल संख्या दिखाना चाहता हूं लेकिन मुझे मानदंड क्वेरी की कुल गणना प्राप्त करने के लिए सीधे आगे नहीं देखा गया।
यह कैसे मेरे कोड की तरह लग रहा है:जेपीए मानदंड एपीआई
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Brand> cQuery = builder.createQuery(Brand.class);
Root<Brand> from = cQuery.from(Brand.class);
CriteriaQuery<Brand> select = cQuery.select(from);
.
.
//Created many predicates and added to **Predicate[] pArray**
.
.
select.where(pArray);
// Added orderBy clause
TypedQuery typedQuery = em.createQuery(select);
typedQuery.setFirstResult(startIndex);
typedQuery.setMaxResults(pageSize);
List resultList = typedQuery.getResultList();
मेरे परिणाम सेट बड़ा तो मैं गिनती क्वेरी के लिए मेरी निकाय लोड नहीं करना चाहते हो सकता है, इसलिए मुझ पर rowCount()
विधि की तरह कुल संख्या प्राप्त करने के लिए कारगर तरीका बता मानदंड (मुझे लगता है कि वहां हाइबरनेट के मानदंड में)।
क्या आप यह पता लगाने में सक्षम थे कि आपको 'em.createQuery (cq) क्यों जोड़ना है; '? धन्यवाद – Ittai
अरे, यह वही है जो मुझे चाहिए ... bu मैं यह भी जानना चाहूंगा कि यह लाइन क्यों न हो! –
मुझे संदेह है कि यह इस तथ्य से है कि 'रूट <12' का उपयोग इस भाग से 'रूट = cQuery.from (Brand.class) से किया जा रहा है;' और फिर दोनों के लिए उपयोग किया जाता है गिनती क्वेरी और पेजेड क्वेरी। AFAIK आपको 'रूट <>' ऑब्जेक्ट्स का उपयोग करके दो बार भविष्यवाणी करने की आवश्यकता है। दूसरा इस पंक्ति में छिपा हुआ है 'cq.select (builder.count (cq.from (brand.class)); '। वास्तव में 'em.createQuery (सीक्यू) क्यों; 'काम जो मुझे नहीं पता, आईएमओ इसे अपवाद फेंकना चाहिए। –
Neilos