एक पेज किए गए डेटा (पेजिनेटेड) के लिए लौटाता है, मुझे अपने मानदंडों और परिणामों के पहले पृष्ठ से मेल खाने वाले रिकॉर्ड की कुल संख्या वापस करने की आवश्यकता होती है। यह उपयोगकर्ताओं के लिए जानकारी प्रदर्शित करने और पृष्ठों की कुल संख्या की गणना करने के लिए उपयोगी है (क्लाइंट पर)।जेपीए मानदंड एक पेज और कुल
इस समय मैं एक ही प्रश्न दो बार चलाता हूं, एक बार कुल गणना के लिए और एक बार वास्तविक रिकॉर्ड के लिए। मुझे उम्मीद है कि एक और अधिक प्रभावी तरीका है।
क्या इन दो प्रश्नों को डेटाबेस में एक कॉल में जोड़ा जा सकता है?
गिनती:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<VersionJpa> r = cq.from(VersionJpa.class);
Predicate p = cb.conjunction();
p = // some filtering code define by caller
cq.where(p);
cq.select(cb.count(r));
TypedQuery<Long> tq = em.createQuery(cq);
return tq.getSingleResult().intValue();
पेज:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<VersionJpa> cq = cb.createQuery(VersionJpa.class);
Root<VersionJpa> root = cq.from(VersionJpa.class);
Predicate p = cb.conjunction();
p = // same filtering code as in the count above
cq.where(p);
TypedQuery<VersionJpa> tq = em.createQuery(cq);
// paginatong
tq.setFirstResults(first); // from caller
tq.setMaxResults(max); // from caller
return tq.getResultList();
@perissf बहुत अच्छा बिंदु धन्यवाद। ग्राहक स्टेटलेस है इसलिए प्रत्येक कॉल पहला हो सकता है इसलिए मुझे सभी प्रतिक्रियाओं पर कुल गिनती प्रदान करने की आवश्यकता है। डेटाबेस लगातार बदल रहा है और कॉल से कॉल करने और पृष्ठ से पृष्ठ (बढ़ने) तक मेरा पूरा परिवर्तन। संयुक्त मामले बनाना मेरे मामले में उपयोगी होगा। यह 2 एन से सिर्फ एन तक डीबी कॉल को कम करेगा। अंकन करने के लिए मेरी समझ डीबी को सभी वस्तुओं को प्राप्त करना है ताकि गिनती लगभग लागत मुक्त होनी चाहिए। – Gadi