Mybatis deja muchas cosas en manos del SQL driver que se está utilizando, y aparece el comportamiento exacto que rodea RowBounds es uno de esos.
Ver https://mybatis.github.io/mybatis-3/java-api.html, particularmente la sección que dice:
Diferentes conductores pueden lograr diferentes niveles de eficiencia en este sentido. Para obtener el mejor rendimiento, utilice tipos de conjuntos de resultados SCROLL_SENSITIVE o SCROLL_INSENSITIVE (en otras palabras:notFORWARD_ONLY).
Aparentemente, el valor predeterminado es UNSET , pero podría intentar usar SCROLL_SENSITIVE como ResultSetType atributo en el select etiquetar y ver si eso ayuda. Consulte https://mybatis.github.io/mybatis-3/sqlmap-xml.html para obtener más información al respecto.
Si eso no funciona, siempre puede solucionar el problema abandonando el uso de RowBounds e implementar un SettingsBean clase (o similar) que su select la etiqueta tomaría como parameterType , y que contiene campos para el offset y limit (o quizás rowStart y rowEnd tiene más sentido para Oracle , y luego puede configurarlos en tiempo de ejecución según sea necesario e interpolarlos dinámicamente en el SQL en el momento en que select se ejecuta.
Mientras que un poco más de código, puedes controlar el comportamiento exactamente como quieras a través de SQL dinámico puro. He usado un enfoque como este con Mybatis y Postgres y ha funcionado bien.
Entonces implementaría su SettingsBean clase con esos campos y sus getters y setters, y su select declaración podría ser algo como:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>