पेजों के साथ काम करना: लिमिट और ऑफसेट

बहुत बार, डेटाबेस से डेटा "पेज" में पुनर्प्राप्त किया जाता है। क्योंकि बड़ी सूचियों के साथ काम करना सुविधाजनक है। हम पहले पंक्तियों को 1 से 20 तक, फिर 21 से 40 तक, और इसी तरह क्वेरी करते हैं।

यह एक ऐसी सामान्य स्थिति है कि SQL में इस LIMIT और OFFSET के लिए विशेष ऑपरेटर होते हैं।

इन ऑपरेटरों के एनालॉग भी हाइबरनेट में मौजूद हैं। केवल उन्होंने तुरंत उन्हें अलग-अलग तरीकों से बनाने का फैसला किया:

  • setFirstResult() OFFSET के समान है ।
  • setMaxResults() LIMIT के समान है ।

इन विधियों का उपयोग करके प्रश्न लिखना बहुत आसान है। आइए एक क्वेरी लिखते हैं जहां हम 41 से शुरू होने वाले 20 कार्यों को वापस करने के लिए कहते हैं। यह इस तरह दिखेगा:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

परिणामों को क्रमबद्ध करें

हमने यह पता लगाया कि क्वेरी के परिणाम स्ट्रिंग्स का हिस्सा कैसे प्राप्त करें। अगला दबाव मुद्दा छँटाई है।

हाइबरनेट में छंटनी सीधे एचक्यूएल क्वेरी में लिखी जाती है और आम तौर पर अपेक्षित दिखती है:

from Employee order by joinDate

यदि आप सॉर्ट ऑर्डर बदलना चाहते हैं, तो आपको परिचित शब्दों का उपयोग करने की आवश्यकता है: एएससी और डीएससी। उदाहरण:

from Employee order by joinDate desc

SQL की तरह ही, आप कई क्षेत्रों के आधार पर छाँट सकते हैं:

from Employee order by joinDate desc, name asc

इसके अलावा, सॉर्ट फ़ील्ड को एक पैरामीटर के रूप में पारित किया जा सकता है:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

एचक्यूएल में कार्य करता है

एचक्यूएल में एसक्यूएल की तरह, आप विभिन्न कार्यों का उपयोग कर सकते हैं।

यहां कुल कार्यों की एक सूची है जो एचक्यूएल का समर्थन करता है:

सकल कार्य विवरण
गिनती करना() पंक्तियों की संख्या लौटाता है
जोड़() मानों के योग की गणना करता है
न्यूनतम () न्यूनतम मान लौटाता है
अधिकतम () अधिकतम मान लौटाता है
औसत () माध्य लौटाता है

जैसा कि आपको उम्मीद है कि याद होगा, कुल कार्य वे हैं जिनका उपयोग समूह के साथ संयोजन के रूप में किया जा सकता है। Group By बिल्कुल SQL की तरह ही काम करता है, इसलिए हम खुद को दोहराएंगे नहीं।

और, ज़ाहिर है, सामान्य कार्य । साधारण कार्यों के साथ, सब कुछ बहुत सरल है - वे SQL सर्वर द्वारा किए जाते हैं, हाइबरनेट को केवल उनका उपयोग करके क्वेरी को सही ढंग से उत्पन्न करने की आवश्यकता होती है।

इसलिए, हाइबरनेट SQL सर्वर द्वारा समर्थित सभी सुविधाओं का समर्थन करता है। और जब आप अपने SessionFactory को कॉन्फ़िगर करते हैं तो SQL सर्वर का प्रकार sqlDialect पैरामीटर द्वारा सेट किया जाता है।

आइए एक उपयोगकर्ता को सौंपे गए कार्यों की संख्या ज्ञात करें:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();