Mybatis
lascia molte cose al SQL driver
che viene utilizzato e sembra il comportamento esatto che circonda RowBounds
è uno di quelli.
Vedi http://mybatis.github.io/mybatis-3/java-api.html, in particolare la sezione che dice:
Driver diversi sono in grado di raggiungere diversi livelli di efficienza in questo senso. Per ottenere le migliori prestazioni, utilizza i tipi di set di risultati SCROLL_SENSITIVE o SCROLL_INSENSITIVE (in altre parole:notFORWARD_ONLY).
L'impostazione predefinita è apparentemente UNSET
, ma potresti provare a utilizzare SCROLL_SENSITIVE
come ResultSetType
attributo nel select
tagga e vedi se questo aiuta. Vedi http://mybatis.github.io/mybatis-3/sqlmap-xml.html per maggiori informazioni al riguardo.
Se non funziona, puoi sempre aggirare il problema abbandonando l'uso di RowBounds
e implementa un SettingsBean classe (o simile) che il tuo select
tag prenderebbe come parameterType
e che contiene i campi per l'offset
e limit
(o forse rowStart
e rowEnd
ha più senso per Oracle
, quindi puoi impostarli in fase di esecuzione secondo necessità e interpolarli dinamicamente nell'SQL nel momento in cui select
viene eseguito.
Mentre un po 'più di codice, puoi controllare il comportamento esattamente come desideri tramite puro SQL dinamico. Ho usato un approccio come questo con Mybatis
e Postgres
e ha funzionato bene.
Quindi implementeresti il tuo SettingsBean classe con quei campi e i loro getter e setter e il tuo select
l'istruzione potrebbe quindi assomigliare a:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>