Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

org.hibernate.Query .iterate() VS .getResultList() क्वेरी जनरेशन

ऐसा लगता है कि यह Hibernate API के साथ कोई समस्या नहीं है , वास्तव में यह वांछित व्यवहार है।

Query.iterate() :

क्वेरी परिणामों को Iterator . के रूप में लौटाएं . यदि क्वेरी में एक से अधिक परिणाम पूर्व पंक्ति में हैं, तो परिणाम Object[] . के उदाहरण में लौटाए जाते हैं .Entities मांग पर परिणाम आरंभिक होने पर लौटा दिया जाता है। पहली SQL क्वेरी identifiers लौटाती है केवल।

1+N SQL निष्पादित करता है प्रश्न। पहली क्वेरी केवल सभी रिकॉर्ड्स के पहचानकर्ता को लौटाती है और जब लौटा हुआ पुनरावर्तक पुनरावृत्त होता है तो हर बार एक अलग SQL क्वेरी निष्पादित की जाती है जिसमें WHERE id=N जैसे WHERE क्लॉज होते हैं। . यदि रिकॉर्ड कैश में मौजूद हैं तो पहली क्वेरी निष्पादित की जाती है और शेष एन क्वेरी निष्पादित नहीं की जाती हैं और रिकॉर्ड कैश से प्राप्त किए जाते हैं।

Iterator<Employee> iterator1 = session.createQuery("from Employee").iterate(); // SELECT EMP_ID FROM EMP
while(iterator1.hasNext()) {
    System.out.println(iterator1.next()); // SELECT * FROM EMP WHERE EMP_ID=?
}
Iterator<Employee> iterator2 = session.createQuery("from Employee").iterate(); // SELECT EMP_ID FROM EMP
while (iterator2.hasNext()) {
    System.out.println(iterator2.next()); // From cache, no SQL
}

Query.getResultList() :Executes 1 SQL query और संपूर्ण डेटा लोड करता है। भले ही रिकॉर्ड कैश में मौजूद हों, डेटाबेस से रिकॉर्ड लोड करने के लिए एक नई SQL क्वेरी निष्पादित की जाती है।

List<Employee> list1 = session.createQuery("from Employee").list(); // SELECT *FROM EMP
for (Employee e : list1) {
    System.out.println(e);
}
List<Employee> list2 = session.createQuery("from Employee").list(); // SELECT *FROM EMP
for (Employee e : list2) {
    System.out.println(e);
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ट्रिगर त्रुटि - अमान्य ट्रिगर

  2. Oracle से डर्बी - ConnectBy और डर्बी में समकक्ष के साथ प्रारंभ करें

  3. Oracle MERGE ORA-00904 त्रुटि बढ़ाता है

  4. Oracle DATE कॉलम को टाइमज़ोन के साथ TIMESTAMP में माइग्रेट करना

  5. Oracle SQL - मैं JSP का उपयोग करके ODCI पाइपलाइन फ़ंक्शन को कैसे कॉल कर सकता हूँ?