1

次のコードは、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)
4

3 に答える 3

2

次のプロパティをpersistence.xmlに追加すると、この問題が解決します(jboss7、hibernate4)

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

方言を変更した代替ソリューション(私はチェックしていません)-https://forum.hibernate.org/viewtopic.php?p= 2452163

于 2013-02-22T05:05:03.827 に答える
2

この問題は、空のテーブルをページングしようとすることに関連しています。これらを削除してください:
.setFirstResult(currentPage * pageSize).setMaxResults(pageSize)
.setFetchSize(pageSize)
問題なく空のテーブルをクエリできるはずです。データをページングする場合は、最初に通常のクエリを実行し、ページングするデータがあることを確認してから、クエリを使用してデータをページングします。

于 2010-09-13T07:34:34.133 に答える