2010-09-13 77 views
1

以下代碼在Job表沒有行時會導致異常。表空時出現Hibernate sql異常

public List<Job> getAll(int currentPage, int pageSize) { 
    return this.sessionFactory.getCurrentSession() 
     .createCriteria(Job.class).addOrder(Order.asc("id")) 
     .setFirstResult(currentPage * pageSize).setMaxResults(pageSize) 
     .setFetchSize(pageSize).list(); 
} 

我正在使用SQL Server和JTDS驅動程序。

我得到的錯誤是

java.sql.SQLException: ResultSet may only be accessed in a forward direction. 
net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:319) 
net.sourceforge.jtds.jdbc.JtdsResultSet.absolute(JtdsResultSet.java:716) 
org.apache.commons.dbcp.DelegatingResultSet.absolute(DelegatingResultSet.java:335) 
org.hibernate.loader.Loader.advance(Loader.java:1469) 
org.hibernate.loader.Loader.getResultSet(Loader.java:1783) 
org.hibernate.loader.Loader.doQuery(Loader.java:662) 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) 
org.hibernate.loader.Loader.doList(Loader.java:2211) 
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095) 
org.hibernate.loader.Loader.list(Loader.java:2090) 
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95) 
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
+0

關於如何避免這種情況的任何想法? – Anthony 2010-09-13 07:24:58

回答

2

的問題,試圖頁的空表關聯。 刪除這些:
.setFirstResult(當前頁*的pageSize).setMaxResults(pageSize的)
.setFetchSize(pageSize的)
,你應該能夠查詢空表沒有問題。 如果您想要分頁數據,請先運行常規查詢,然後在知道有數據要分頁後,使用查詢分頁數據。

+0

使用MySQL時,它工作正常。它似乎只與SQL Server失敗。 – Anthony 2010-09-13 07:53:15

2

添加下列屬性的persistence.xml解決了這個問題對我來說(jboss7,hibernate4)

<property name="hibernate.jdbc.use_scrollable_resultset" value="false" /> 

與改變方言替代解決方案(不是我選中) - https://forum.hibernate.org/viewtopic.php?p=2452163

+0

當使用setFirstResult()時,用JTDS 1.2.7解決了我在SQL Server 2000上的前進方向問題,謝謝! – user2172816 2013-05-14 06:45:37

0

我在這同問題,東張西望了一會後,我被同事勸從此休眠方言變化:

org.hibernate.dialect.SQLServerDialect 

這個

org.hibernate.dialect.SQLServer2005Dialect 

它解決了我的問題。

發佈只是爲了讓人們檢查自己的方言。

相關問題