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 http://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 http://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>