पृष्ठांसह कार्य करणे: मर्यादा आणि ऑफसेट

बर्‍याचदा, डेटाबेसमधील डेटा "पृष्ठे" मध्ये पुनर्प्राप्त केला जातो. कारण मोठ्या याद्यांसह कार्य करणे हे कसे सोयीचे आहे. आम्ही प्रथम 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();

क्रमवारी लावा

क्वेरीच्या रिझल्ट स्ट्रिंगचा भाग कसा मिळवायचा ते आम्ही शोधून काढले. पुढील दाबणारा मुद्दा क्रमवारी आहे.

हायबरनेटमध्ये क्रमवारी लावणे थेट HQL क्वेरीमध्ये लिहिलेले आहे आणि साधारणपणे अपेक्षित दिसते:

from Employee order by joinDate

जर तुम्हाला क्रमवारी क्रम बदलायचा असेल, तर तुम्हाला परिचित शब्द वापरावे लागतील: asc आणि desc. उदाहरण:

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();

HQL मध्ये कार्ये

HQL मधील SQL प्रमाणे, तुम्ही विविध फंक्शन्स वापरू शकता.

येथे HQL सपोर्ट करत असलेल्या एकूण फंक्शन्सची सूची आहे :

एकत्रित कार्ये वर्णन
गणना() पंक्तींची संख्या मिळवते
बेरीज() मूल्यांच्या बेरजेची गणना करते
मि() किमान मूल्य मिळवते
कमाल() कमाल मूल्य मिळवते
सरासरी() सरासरी मिळवते

तुम्हाला आशा आहे की लक्षात ठेवल्याप्रमाणे, एकत्रित फंक्शन्स ही अशी आहेत जी समूहाच्या संयोगाने वापरली जाऊ शकतात. ग्रुप बाय 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();