Mybatis
laat veel dingen over aan het SQL driver
dat wordt gebruikt, en het lijkt het exacte gedrag rondRowBounds
is er zo een.
Zie http://mybatis.github.io/mybatis-3/java-api.html, met name de sectie die zegt:
Verschillende chauffeurs kunnen hierbij verschillende efficiëntieniveaus bereiken. Gebruik voor de beste prestaties resultaatsettypen SCROLL_SENSITIVE of SCROLL_INSENSITIVE (met andere woorden:notFORWARD_ONLY).
De standaard is blijkbaar UNSET
, maar je zou kunnen proberen om SCROLL_SENSITIVE
. te gebruiken als het ResultSetType
attribuut in de select
tag en kijk of dat helpt. Zie http://mybatis.github.io/mybatis-3/sqlmap-xml.html voor meer informatie hierover.
Als dat niet werkt, kun je het probleem altijd omzeilen door het gebruik van RowBounds
te schrappen en implementeer een SettingsBean klasse (of vergelijkbaar) die je select
tag zou nemen als een parameterType
, en die velden bevat voor de offset
en limit
(of misschien rowStart
en rowEnd
zinvoller voor Oracle
, en dan kunt u deze zo nodig tijdens runtime instellen en dynamisch interpoleren in de SQL op het moment dat de select
wordt uitgevoerd.
Hoewel je wat meer code hebt, kun je het gedrag precies zo regelen als je wilt via pure dynamische SQL. Ik heb een dergelijke aanpak gebruikt met Mybatis
en Postgres
en het heeft goed gewerkt.
U zou dus uw SettingsBean . implementeren klasse met die velden en hun getters en setters, en je select
verklaring kan er dan ongeveer zo uitzien:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>