Mybatis
оставя много неща на SQL driver
който се използва и изглежда точното поведение околоRowBounds
е един от тях.
Вижте http://mybatis.github.io/mybatis-3/java-api.html, особено секцията, която казва:
Различните драйвери са в състояние да постигнат различни нива на ефективност в това отношение. За най-добра производителност използвайте типове набори от резултати SCROLL_SENSITIVE или SCROLL_INSENSITIVE (с други думи:notFORWARD_ONLY).
По подразбиране очевидно е UNSET
, но можете да опитате да използвате SCROLL_SENSITIVE
като ResultSetType
атрибут в select
маркирайте и вижте дали това помага. Вижте http://mybatis.github.io/mybatis-3/sqlmap-xml.html за повече информация по въпроса.
Ако това не работи, винаги можете да заобиколите проблема, като се откажете от използването на RowBounds
и имплементирайте SettingsBean клас (или подобен), който select
маркерът ще приеме като parameterType
, и който съдържа полета за offset
и limit
(или може би rowStart
и rowEnd
има повече смисъл за Oracle
, а след това можете да ги зададете по време на изпълнение според нуждите и да ги интерполирате динамично в SQL в момента на select
се изпълнява.
Макар и малко повече код, вие можете да контролирате поведението точно както искате чрез чист динамичен SQL. Използвах подход като този с Mybatis
и Postgres
и работи добре.
Така че бихте внедрили своя SettingsBean клас с тези полета и техните getters и setters, и вашия select
тогава изявлението може да изглежда нещо като:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>