Oracle
 sql >> Baza danych >  >> RDS >> Oracle

org.hibernate.Query .iterate() VS .getResultList() generowanie zapytań

Wygląda na to, że nie jest to problem z Hibernate API , wymyśl to pożądane zachowanie.

Zapytanie.iterate() :

Zwróć wyniki zapytania jako Iterator . Jeśli zapytanie zawiera wiele wyników przed wierszem, wyniki są zwracane w instancji Object[] .Entities zwracane, gdy wyniki są inicjowane na żądanie. Pierwsze zapytanie SQL zwraca identifiers tylko.

Wykonuje 1+N SQL zapytania. Pierwsze zapytanie zwraca tylko identyfikator wszystkich rekordów, a gdy zwracany iterator jest iterowany, za każdym razem, gdy wykonywane jest oddzielne zapytanie SQL zawierające klauzulę WHERE, taką jak WHERE id=N . Jeśli rekordy są obecne w pamięci podręcznej, wykonywane jest pierwsze zapytanie, a pozostałe N zapytań nie jest wykonywanych, a rekordy są pobierane z pamięci podręcznej.

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 i ładuje całe dane. Nawet jeśli rekordy znajdują się w pamięci podręcznej, wykonywane jest nowe zapytanie SQL w celu załadowania rekordów z bazy danych.

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. Połączenie Laravel i Oracle

  2. Wybór SQL dla wszystkich rekordów, które mogą posiadać określoną wartość

  3. utwórz tabelę na podstawie typu zdefiniowanego przez użytkownika

  4. Aktualizacja krytycznej poprawki Oracle — październik 2020 r.

  5. jak wstawić długi ciąg oracle clob lub blob?