Query query = entityManager.createQuery("select distinct(id) From Table where plant=?1").setParameter(1, plant);
query.setFirstResult((pageNo-1) * pageSize);
query.setMaxResults(pageSize);
List<String> Ids = query.getResultList();
此代码工作正常与SQL Server 2008,但是当我迁移的数据库2008年至2014年这给了我以下错误:setMaxResult不是在MSSQL服务器2014的工作与Hibernate
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.throwNotScrollable(SQLServerResultSet.java:376)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetIsScrollable(SQLServerResultSet.java:399)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.absolute(SQLServerResultSet.java:1474)
at org.jboss.jca.adapters.jdbc.WrappedResultSet.absolute(WrappedResultSet.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:104)
... 170 more
我曾尝试以下: 1.将jdbc驱动程序从sqljdbc4.0.jar
更改为sqljdbc4.2.jar
。
LIMIT
在SQL服务器不支持ROW_NUMBER()
不是一个好的解决办法,因为我想不重复的记录
串查询= “选择从表极限不同ID” +偏移+ “” + noOfRecords;
问题是,Hibernate只在可向前滚动的结果集上调用方法,这些方法仅在可滚动结果集上可用并受支持(通过规范!)。你需要向Hibernate提交一个bug,如果他们打算调用这些方法,他们应该明确地要求一个可滚动的结果集。请注意,SQL Server可能不知道'LIMIT',但它具有'TOP',请参阅https://msdn.microsoft.com/en-us/library/ms176104.aspx –
@ rohit-k您是否最终解决了此问题?怎么样? – Krzysiek
@Krzysiek无法解决...我已经要求客户端开发人员在那里处理分页:-) –