Ich versuche, eine alte Anwendung zu konvertieren SQL Ausführung fragt die alte Art und Weise, wie unten:Hibernate HQL Create
java.sql.Connection connection = ....
String queryStr="select acct from Person where acct in (select acct from Document where dbcreate_date > DATEADD(hh,-12, GETDATE())) and status not in ('A','P')";
...
...
java.sql.Statement statement = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = statement.executeQuery(queryStr);
Der obige Code dauert etwa 10 Millisekunden. Dazu gehört das Abrufen der Datenbankverbindung, das Erstellen der Anweisung und das Ausführen der Abfrage.
Ich verwende jetzt Hibenate HQL und erstellt eine HQL-Abfrage wie folgt aus:
Query query = session.createQuery("select p.acct from Person p where p.acct in (select acct from Document d where create_date > :date and status not in ('A','P'))");
nun gerade diese Aussage „session.createQuery (....)“ ist etwa 105 Millisekunden nehmen, die ungefähr ist 10 mal länger als das ganze Abfrage-Zeug auf die alte Art und Weise wie oben erwähnt.
Jetzt bin ich nicht wirklich sicher, wie Hibernate Query Caching funktioniert, aber wenn ich die gleiche HQL-Anweisung ein zweites Mal ausführen, dauert es etwa 5 Millisekunden.
Jetzt ist meine Frage, warum passiert dieses Verhalten mit Hibernate HQL? Jeder weiß, was in der "session.createQuery (...)" -Methode vor sich geht, die beim ersten Mal viel länger dauert, beim zweiten Mal aber viel weniger. Ich habe auch festgestellt, dass Hibernate das SQL für die Datenbank beide Male ausführt, wenn "query.list()" ausgeführt wird.
Danke.
Ja, es macht Sinn. Ich bin neu im Hibernate-Caching, aber ich beginne zu verstehen, welche Vorteile es bietet und wie man es richtig einsetzt. Danke für deine Antworten. – Marquinio