2010-12-31 10 views
1

Ich habe 2 Tabellen A und B. Ich schreibe hql wie a.key =? und a.id = b.idHibernate generiert zusätzliche Abfrage

Es generiert zusätzliche Abfrage als benötigt.

Erste Abfrage ist von Elemente zu erhalten, die übereinstimmen geben a.key (es hat 179 Elemente). Dann wird dieselbe Abfrage 4 Mal ausgeführt. erste Iteration nimmt 100 Parameter in ‚in‘ Klausel, dann 50, dann 25 und dann 4.

Ich verstehe nicht, warum es nicht Abfrage kaufen gibt 179 Elemente in einzelnen Abfrage

Antwort

3

auf Ihre Beziehung ausführen kann von A nach B Sie höchstwahrscheinlich haben:

batch-size="100" 

und möglicherweise:

:

fetch="select" 

Sie das ändern könnte

fetch="join" 

oder erhöhen Sie die Losgröße auf 200 und sehen, was passiert.

Beachten Sie, dass der a.id=b.id Teil Ihrer Abfrage eine Glocke klingelt, dass Ihr OO-Design und ORM-Zuordnung nicht korrekt ist. Sie müssen Relationen verwenden und Hibernate die Arbeit (in diesem Fall die Joins) für Sie erledigen lassen. Wenn dies der Fall ist, sind die obigen Vorschläge nicht anwendbar, bis Sie Ihre Entitäten korrekt zugeordnet haben.