2015-09-10 18 views
2
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服務器不支持
  • 串查詢= 「選擇從表極限不同ID」 +偏移+ 「」 + noOfRecords;

  • ROW_NUMBER()不是一個好的解決辦法,因爲我想不重複的記錄
  • +2

    問題是,Hibernate只在可向前滾動的結果集上調用方法,這些方法僅在可滾動結果集上可用並受支持(通過規範!)。你需要向Hibernate提交一個bug,如果他們打算調用這些方法,他們應該明確地要求一個可滾動的結果集。請注意,SQL Server可能不知道'LIMIT',但它具有'TOP',請參閱https://msdn.microsoft.com/en-us/library/ms176104.aspx –

    +0

    @ rohit-k您是否最終解決了此問題?怎麼樣? – Krzysiek

    +0

    @Krzysiek無法解決...我已經要求客戶端開發人員在那裏處理分頁:-) –

    回答