२.१ प्रश्न वर्गांचा परिचय

तसे, आणखी एक महत्त्वाचा मुद्दा म्हणजे क्वेरी मदतनीस वर्ग. आपण ते या उदाहरणात पाहू शकता:

public List<Employee> getAllEmployes() {
    try (Session session = sessionFactory.openSession()) {
            Query<Employee> query = session.createQuery("from Employee", Employee.class);
            return query.list();
    }
}

खरं तर, क्वेरी हा एक इंटरफेस आहे आणि त्यात वेगवेगळ्या प्रकरणांसाठी अनेक अंमलबजावणी आहेत. पण साधेपणासाठी मी याला क्लास म्हणत राहीन. हे, समजा, व्यापक अर्थाने एक वर्ग - OOP च्या दृष्टीने.

नोंद. पूर्वी दोन वर्ग असत:

  • क्वेरीचे वर्णन करण्यासाठी क्वेरी .
  • ज्ञात प्रकारासह क्वेरीचे वर्णन करण्यासाठी TypedQuery .

हायबरनेट आधीपासून अस्तित्वात असताना प्रथम दिसू लागले आणि अद्याप कोणतेही जेनेरिक नव्हते. त्यानंतर, JDK 5 च्या रिलीझनंतर, हायबरनेटमध्ये आणखी एक वर्ग जोडला गेला - TypedQuery, ज्याने आधीच क्वेरी परिणाम टाइप करण्यास समर्थन दिले.

परंतु, माझ्या लक्षात येण्याप्रमाणे, हायबरनेटच्या 5 व्या आवृत्तीपासून प्रारंभ करून, फक्त एक टाइप केलेला वर्ग शिल्लक होता, आणि त्याला आता क्वेरी म्हणतात.

क्वेरी तयार करण्याचा मानक मार्ग आहे:


Query<Employee> query = session.createQuery("from Employee", Employee.class);

तुम्ही क्वेरी ऑब्जेक्ट्स कसे बनवायचे ते शिकलात, परंतु तुम्ही या क्वेरी कशा कार्यान्वित कराल?

हे येथे आणखी सोपे आहे - आम्ही क्वेरी ऑब्जेक्टवर फक्त list() पद्धत कॉल करतो:


Query<Employee> query = session.createQuery("from Employee", Employee.class);
List<Employee> resultLіst = query.list();

list() पद्धतीला JPA समानार्थी शब्द आहे, एक पद्धत जी समान कार्य करते परंतु तिला getResultList() म्हणतात . तुम्ही काहीवेळा ते इतर प्रोग्रामरने लिहिलेल्या कोडमध्ये पाहू शकता.

तसे, जर क्वेरी असे सूचित करते की परिणाम एकाच निकालात असेल, तर क्वेरी कॉल करण्यासाठी uniqueResult() पद्धत वापरणे सोपे आहे .


Query<Employee> query = session.createQuery("from Employee where id = 1", Employee.class);
Employee result = query.uniqueResult();

uniqueResult() पद्धतीला JPA समानार्थी शब्द आहे, singleResult() पद्धत . हे हायबरनेटच्या JPA मानकाशी सुसंगततेसाठी सादर केले गेले. तो नेमके तेच करतो.

2.2 क्वेरी वर्ग पद्धती

खरं तर, क्वेरी क्लासमध्ये बर्‍याच वेगवेगळ्या पद्धती आहेत. खाली मी त्यापैकी आणखी तीन बद्दल बोलेन.

पहिली stream() पद्धत आहे . आणि त्याचा JPA समानार्थी getResultStream() आहे .

या दोन्ही पद्धती यादीऐवजी डेटाचा प्रवाह परत करतात. जेव्हा आपल्याला एकाच वेळी क्वेरीच्या परिणामी प्राप्त झालेल्या सर्व ऑब्जेक्ट्सची आवश्यकता नसते तेव्हा हा दृष्टिकोन खूप कार्यक्षम असू शकतो. किंवा त्यापैकी फक्त पहिला वापरला जाण्याची शक्यता आहे.

उदाहरण:


Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
Stream<Employee> stream = query.stream();

दुसरी पद्धत executeUpdate() पद्धत आहे . तुम्ही एक क्वेरी लिहू शकता जी डेटाबेसमध्ये काहीतरी बदलेल. या प्रकरणात, डेटाबेसमध्ये प्रवेश करताना हायबरनेट केवळ-वाचनीय व्यवहार वापरत नाही हे आवश्यक आहे.

विनंतीचे उदाहरण: आम्ही सर्व वापरकर्त्यांची पातळी 1 ने वाढवण्याचा निर्णय घेतला.


Query<User> query = session.createQuery("update User set level=level+1", User.class);
int count = query.executeUpdate();

executeUpdate() पद्धत प्रत्यक्षात सुधारित केलेल्या पंक्तींची संख्या परत करेल.

आणि शेवटी तिसरी पद्धत scroll() आहे . आम्ही तुम्हाला याबद्दल थोडे अधिक सांगू.

2.3 वर्ग पद्धती स्क्रोल करा

ही पद्धत थोडीशी stream() पद्धतीसारखीच आहे . केवळ तेच तुम्हाला परिणाम अजिबात न काढता निकालांच्या सूचीमधून पुढे जाण्याची परवानगी देते. म्हणजेच, तुम्ही क्वेरी कार्यान्वित करू शकता, नंतर निकालाच्या दशलक्षव्या ओळीवर स्क्रोल करा आणि तेथून डेटा वाचण्यास प्रारंभ करा.

असा प्रगत पुनरावर्तक.


Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
ScrollableResults<Employee> scroll = query.scroll();

ScrollableResults ऑब्जेक्टमध्ये खालील पद्धती आहेत:

पद्धत वर्णन
आर मिळवा() वर्तमान घटक मिळवते
पुढे() पॉइंटरला पुढील घटकाकडे हलवते
मागील() पॉइंटरला मागील घटकाकडे हलवते
स्क्रोल (इंट आकार) आकाराच्या ओळींनुसार पुढे स्क्रोल करा
पोझिशन (इंट पॉस) घटक pos क्रमांक वर्तमान घटक बनवते
शेवटचे() सध्याचा घटक आता शेवटचा आहे
पहिला() सध्याचा घटक आता पहिला आहे
getRowNumber() वर्तमान ओळ क्रमांक मिळवते
setRowNumber() वर्तमान ओळ क्रमांक सेट करते

समजा तुम्ही एक क्वेरी रन केली आहे आणि तुम्हाला शेवटचा घटक मिळवायचा आहे. ते कसे करायचे ते येथे आहे:


Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
ScrollableResults<Employee> scroll = query.scroll();
scroll.last();
Employee lastEmployee = scroll.get();