当Job表没有行时,以下代码会导致异常。
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 :(得分:2)
该问题与尝试分页空表有关。
放下这些:
.setFirstResult(currentPage * pageSize).setMaxResults(pageSize)
.setFetchSize(pageSize的)
你应该能够毫无问题地查询空表。
如果要分页数据,请先运行常规查询,然后在知道有页面数据后,使用查询分页数据。
答案 1 :(得分:2)
将以下属性添加到persistence.xml为我解决了这个问题(jboss7,hibernate4)
<property name="hibernate.jdbc.use_scrollable_resultset" value="false" />
改变方言的替代解决方案(未经我检查) - https://forum.hibernate.org/viewtopic.php?p=2452163
答案 2 :(得分:0)
我遇到了同样的问题,经过一段时间的环顾,我被一位同事告知要改变这种休眠方言:
org.hibernate.dialect.SQLServerDialect
到这个
org.hibernate.dialect.SQLServer2005Dialect
它解决了我的问题。
仅作为人们检查方言的注释。