Mybatis
deixa muitas coisas para o SQL driver
que está sendo usado, e aparece o comportamento exato em torno de RowBounds
é um desses. Veja http://mybatis.github.io/mybatis-3/java-api.html, particularmente a seção que diz:
Diferentes motoristas são capazes de atingir diferentes níveis de eficiência nesse sentido. Para obter o melhor desempenho, use os tipos de conjunto de resultados de SCROLL_SENSITIVE ou SCROLL_INSENSITIVE (em outras palavras:notFORWARD_ONLY).
O padrão é aparentemente
UNSET
, mas você pode tentar usar SCROLL_SENSITIVE
como o ResultSetType
atributo no select
marque e veja se isso ajuda. Veja http://mybatis.github.io/mybatis-3/sqlmap-xml.html para mais informações sobre isso. Se isso não funcionar, você sempre pode contornar o problema descartando o uso de
RowBounds
e implementar um SettingsBean classe (ou similar) que seu select
tag tomaria como um parameterType
, e que contém campos para o offset
e limit
(ou talvez rowStart
e rowEnd
fazer mais sentido para Oracle
, e então você pode defini-los em tempo de execução conforme necessário e interpolá-los dinamicamente no SQL no momento em que select
É executado. Com um pouco mais de código, você controla o comportamento exatamente como deseja por meio de SQL dinâmico puro. Eu usei uma abordagem como esta com
Mybatis
e Postgres
e tem funcionado bem. Então você implementaria seu SettingsBean class com esses campos e seus getters e setters, e seu
select
declaração pode então ser algo como:<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>