We're updating the issue view to help you get more done. 

useScrollableResultSetToSkip not used


If I use org.hibernate.dialect.SQLServerDialect with SQLServer2008 in order to paginate correctly (see which was my previous errors, but this time I use a simple @Entity without any @Formula on it), I've got a "The requested operation is not supported on forward only result".

Here is the stack :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ResultSetProxyHandler(AbstractResultSetProxyHandler).continueInvocation(Object, Method, Object[]) line: 104 ResultSetProxyHandler(AbstractProxyHandler).invoke(Object, Method, Object[]) line: 81 $Proxy172.absolute(int) line: not available QueryLoader(Loader).advance(ResultSet, RowSelection) line: 1651 QueryLoader(Loader).getResultSet(PreparedStatement, boolean, boolean, RowSelection, SessionImplementor) line: 1982 QueryLoader(Loader).doQuery(SessionImplementor, QueryParameters, boolean, ResultTransformer) line: 829 QueryLoader(Loader).doQueryAndInitializeNonLazyCollections(SessionImplementor, QueryParameters, boolean, ResultTransformer) line: 289 QueryLoader(Loader).doList(SessionImplementor, QueryParameters, ResultTransformer) line: 2463 QueryLoader(Loader).doList(SessionImplementor, QueryParameters) line: 2449 QueryLoader(Loader).listIgnoreQueryCache(SessionImplementor, QueryParameters) line: 2279 QueryLoader(Loader).list(SessionImplementor, QueryParameters, Set, Type[]) line: 2274 QueryLoader.list(SessionImplementor, QueryParameters) line: 470 QueryTranslatorImpl.list(SessionImplementor, QueryParameters) line: 355 HQLQueryPlan.performList(QueryParameters, SessionImplementor) line: 196 SessionImpl.list(String, QueryParameters) line: 1115 QueryImpl.list() line: 101 QueryImpl<X>.getResultList() line: 252 JPAQuery(AbstractJPAQuery<Q>).getResultList(Query) line: 222 JPAQuery(AbstractJPAQuery<Q>).list(Expression<RT>) line: 274

It seems to be a problem in org.hibernate.loader.Loader because if I put a breakpoint in line 1739 :

1 2 3 4 5 st = session.getTransactionCoordinator().getJdbcCoordinator().getStatementPreparer().prepareQueryStatement( sql, callable, scrollMode );

Here are the values of the variables :

  • useLimit : true

  • hasFirstRow : true

  • useLimitOffset : false

  • canScroll : true

  • useScrollableResultSetToSkip : true

  • scrollMode : null // I think, here it must have been ScrollMode.SCROLL_SENSITIVE

Actually, if I replace the value of scrollMode from null to ScrollMode.SCROLL_SENSITIVE just before the excecution of line 1739, then the error doesn't occure.

So there must be a problem in private ScrollMode getScrollMode(boolean scroll, boolean hasFirstRow, boolean useLimitOffSet, QueryParameters queryParameters) (line 1685) which doesn't use that useScrollableResultSetToSkip variable...

Here it's a problem with SQLServerDialect, but it could be another dialect which would want useScrollableResultSetToSkip to be taken into account (that is to say hasFirstRow = true, useLimit = true, useLimitOffset = false (dialect.supportsLimitOffset = false), getFactory().getSettings().isScrollableResultSetsEnabled() = true), because later getResultSet() method (line 1982) calls advance() method if !dialect.supportsLimitOffset() || !useLimit( selection, dialect ) which will finally call ResultSet.absolute which will throw that exception because the ResultSet wasn't prepared with ScrollMode SENSITIVE.


JBoss 7.1.1.Final, SQLServer 2008 R2





Anthony Ogier

Fix versions




Suitable for new contributors


Requires Release Note


Pull Request





Affects versions