Mybatis
lader mange ting være op til SQL driver
der bliver brugt, og det ser ud til den nøjagtige adfærd omkring RowBounds
er en af dem.
Se http://mybatis.github.io/mybatis-3/java-api.html, især afsnittet, der siger:
Forskellige drivere er i stand til at opnå forskellige effektivitetsniveauer i denne henseende. For den bedste ydeevne skal du bruge resultatsættyperne SCROLL_SENSITIVE eller SCROLL_INSENSITIVE (med andre ord:notFORWARD_ONLY).
Standardindstillingen er tilsyneladende UNSET
, men du kan prøve at bruge SCROLL_SENSITIVE
som ResultSetType
attribut i select
tag og se om det hjælper. Se http://mybatis.github.io/mybatis-3/sqlmap-xml.html for mere information om det.
Hvis det ikke virker, kan du altid omgå problemet ved at droppe brugen af RowBounds
og implementer en SettingsBean klasse (eller lignende), som du select
tag ville tage som en parameterType
, og som indeholder felter for offset
og limit
(eller måske rowStart
og rowEnd
giver mere mening for Oracle
, og så kan du indstille dem ved kørsel efter behov og interpolere dem dynamisk i SQL'en på det tidspunkt, select
udføres.
Mens der er lidt mere kode, kan du styre adfærden præcis som du vil gennem ren dynamisk SQL. Jeg har brugt en fremgangsmåde som denne med Mybatis
og Postgres
og det har fungeret godt.
Så du ville implementere din SettingsBean klasse med disse felter og deres gettere og sættere, og dit select
sætning kan så se noget i retning af:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>