Mybatis
pozostawia wiele rzeczy w gestii SQL driver
który jest używany i wygląda dokładnie tak samo, jak otaczające RowBounds
jest jednym z nich.
Zobacz http://mybatis.github.io/mybatis-3/java-api.html, w szczególności sekcję, która mówi:
Różni kierowcy są w stanie osiągnąć różne poziomy wydajności w tym zakresie. Aby uzyskać najlepszą wydajność, użyj typów zestawów wyników SCROLL_SENSITIVE lub SCROLL_INSENSITIVE (innymi słowy:notFORWARD_ONLY).
Wartość domyślna to najwyraźniej UNSET
, ale możesz spróbować użyć SCROLL_SENSITIVE
jako ResultSetType
atrybut w select
tag i zobacz, czy to pomaga. Zobacz http://mybatis.github.io/mybatis-3/sqlmap-xml.html, aby uzyskać więcej informacji na ten temat.
Jeśli to nie zadziała, zawsze możesz obejść ten problem, rezygnując z używania RowBounds
i zaimplementuj SettingsBean klasę (lub podobną), którą select
tag przyjmie jako parameterType
, który zawiera pola dla offset
i limit
(lub może rowStart
i rowEnd
bardziej sensowne dla Oracle
, a następnie można je ustawić w czasie wykonywania zgodnie z potrzebami i interpolować je dynamicznie do SQL w momencie select
jest wykonywany.
Podczas gdy trochę więcej kodu, możesz kontrolować zachowanie dokładnie tak, jak chcesz, za pomocą czystego dynamicznego SQL. Użyłem takiego podejścia z Mybatis
i Postgres
i działa dobrze.
Więc zaimplementujesz swój SettingsBean klasę z tymi polami i ich getterami i seterami, a twój select
oświadczenie może wtedy wyglądać mniej więcej tak:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>