Mybatis
überlässt viele Dinge dem SQL driver
das verwendet wird, und es zeigt das genaue Verhalten rund umRowBounds
ist einer davon.
Siehe http://mybatis.github.io/mybatis-3/java-api.html, insbesondere den Abschnitt, in dem es heißt:
Unterschiedliche Treiber können dabei unterschiedliche Wirkungsgrade erreichen. Verwenden Sie für die beste Leistung die Ergebnismengentypen SCROLL_SENSITIVE oder SCROLL_INSENSITIVE (mit anderen Worten:notFORWARD_ONLY).
Der Standardwert ist anscheinend UNSET
, aber Sie könnten versuchen, SCROLL_SENSITIVE
zu verwenden als ResultSetType
-Attribut im select
markieren und sehen, ob das hilft. Weitere Informationen dazu finden Sie unter http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Wenn das nicht funktioniert, können Sie das Problem jederzeit umgehen, indem Sie auf die Verwendung von RowBounds
verzichten und implementieren Sie eine SettingsBean Klasse (oder ähnlich), die Sie select
Tag als parameterType
annehmen würde , und die Felder für den offset
enthält und limit
(oder vielleicht rowStart
und rowEnd
für Oracle
sinnvoller , und dann können Sie diese zur Laufzeit nach Bedarf setzen und zum Zeitpunkt der select
dynamisch in die SQL interpolieren wird ausgeführt.
Mit etwas mehr Code können Sie das Verhalten durch reines dynamisches SQL genau so steuern, wie Sie es möchten. Ich habe einen solchen Ansatz mit Mybatis
verwendet und Postgres
und es hat gut funktioniert.
Sie würden also Ihr SettingsBean implementieren Klasse mit diesen Feldern und ihren Gettern und Settern und Ihrer select
Die Anweisung könnte dann etwa so aussehen:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>