Oracle
 sql >> база данни >  >> RDS >> Oracle

org.hibernate.Query .iterate() VS .getResultList() генериране на заявки

Това не изглежда да е проблем с Hibernate API , всъщност това е желаното поведение.

Query.iterate() :

Връща резултатите от заявката като Iterator . Ако заявката съдържа множество резултати преди ред, резултатите се връщат в екземпляр на Object[] .Entities връща се, когато резултатите се инициализират при поискване. Първата SQL заявка връща identifiers само.

Изпълнява 1+N SQL заявки. Първата заявка връща само идентификатора на всички записи и когато върнатият итератор се повтаря, всеки път, когато се изпълнява отделна SQL заявка, която съдържа клауза WHERE като WHERE id=N . Ако записите присъстват в кеша, тогава първата заявка се изпълнява, а останалите N заявки не се изпълняват и записите се получават от кеша.

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. Как да декларирам курсор след началната секция на Oracle PL/SQL процедура

  2. Как да търсите нов ред char в таблицата на oracle?

  3. Мога ли да инсталирам JDK 1.6 върху JDK 1.3 по подразбиране на базата данни на Oracle?

  4. Бавна производителност за факторинг на дълбоко вложени подзаявки (CTE)

  5. Невалиден SQL идентификатор