sql >> Database >  >> RDS >> Oracle

org.hibernate.Query .iterate() VS .getResultList() querygeneratie

Dit lijkt geen probleem te zijn met Hibernate API , eigenlijk is dit het gewenste gedrag.

Query.iterate() :

Retourneer de queryresultaten als een Iterator . Als de query meerdere resultaten voor de rij bevat, worden de resultaten geretourneerd in een instantie van Object[] .Entities geretourneerd omdat de resultaten op aanvraag worden geïnitialiseerd. De eerste SQL-query retourneert identifiers alleen.

Voert 1+N SQL uit vragen. De eerste query retourneert alleen de identifier van alle records en wanneer de geretourneerde iterator wordt herhaald, wordt elke keer dat een afzonderlijke SQL-query wordt uitgevoerd die een WHERE-clausule bevat, zoals WHERE id=N . Als de records in de cache aanwezig zijn, wordt de eerste query uitgevoerd en worden de overige N query's niet uitgevoerd en worden records uit de cache gehaald.

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 en laadt de volledige gegevens. Zelfs als de records in de cache aanwezig zijn, wordt een nieuwe SQL-query uitgevoerd om de records uit de database te laden.

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. mysql Zoek een string in tabelkolom met een andere volgorde

  2. Waar kan ik de SSIS Precompile Property voor scripttaken in SQL Server 2008 vinden?

  3. Pure TNSNAMES gebruiken in plaats van hostgebaseerde databaseverbindingen in Oracle JDeveloper

  4. Formatteer SQLite-resultaten als JSON