Ich habe eine Hibernate-Abfrage, um eine Liste von Zeilen abzurufen, die auf eine maximale Anzahl beschränkt ist. Aber wenn ich die Hibernate-Protokolle, zu meiner Überraschung zu lesen, filtert es intern eine Unterabfrage, die nur eine Zeile hat select count(*)
Warum protokolliert Hibernate eine andere Abfrage, die nicht ausgeführt wird?
-- Log4j
-- INFO [STDOUT] Hibernate:
select *
from (select count(*) as y0_
from yyy this_
where this_.type=3 and
this_.VALUE=2 and
this_.src='ZZZZZ'
)
where rownum <= 100;
Die outter Kriterien wird wie folgt aus:
criteria.setProjection(Projections.rowCount());
criteria.setMaxResults(MAX_RESULTS); // MAX_RESULTS = 100
final List results = criteria.list(); // It executes the above query here.
Was ist die Erklärung dafür Verhalten? Ich habe mehr Abfragen mit diesem irreführenden Ergebnis in den Protokollen.
Was ich meine, ist, dass der SetMaxResulst tatsächlich die abgerufenen Daten um 100 filtert. Es ist notwendig. Ich mache eine innere Abfrage und es hat zum Beispiel 1500 zurückgegebene Werte, also brauche ich den 100 Filter, um nicht zu überlasten. Es filtert wie vorgesehen. Auf der anderen Seite interpretiert Hibernate die Abfrage anders als wenn sie nur 1 zählt (*). Ich werde die Frage mit der inneren Abfrage aktualisieren. Danke für deine schnelle Antwort. – another
Eine Abfrage, die eine Anzahl von Auszählungen (*) ohne Gruppierung nach ausführt, kann nicht mehr als 1 Zeile zurückgeben. Es wird niemals 1500 Reihen zurückgeben. –
Ich werde den Code erweitern, ich könnte einen Code unterbewerten. – another