Hibernate sql исключение, когда таблица пуста - PullRequest
1 голос
/ 13 сентября 2010

Следующий код вызывает исключение, когда в таблице заданий нет строк.

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)

Ответы [ 3 ]

2 голосов
/ 22 февраля 2013

Добавление следующего свойства в persistence.xml решает эту проблему для меня (jboss7, hibernate4)

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

Альтернативное решение с измененным диалектом (не проверено мной) - https://forum.hibernate.org/viewtopic.php?p=2452163

2 голосов
/ 13 сентября 2010

Проблема связана с попыткой создания страницы пустой таблицы.удалите их:
.setFirstResult (currentPage * pageSize) .setMaxResults (pageSize)
.setFetchSize (pageSize)
, и вы сможете без проблем запросить пустую таблицу.Если вы хотите отобразить данные на странице, сначала выполните обычный запрос, а затем разместите данные в своем запросе после того, как узнаете, что у вас есть данные на странице.

0 голосов
/ 31 июля 2013

У меня была такая же проблема, и после осмотра некоторое время коллега посоветовал мне изменить спящий диалект на это:

org.hibernate.dialect.SQLServerDialect

к этому

org.hibernate.dialect.SQLServer2005Dialect

и это решило мою проблему.

Размещение в качестве заметки для людей, чтобы проверить свой диалект.

...