2010-09-13 7 views
1

Следующий код вызывает исключение, если таблица Job не имеет строк.Hibernate sql exception при пустой таблице

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

ответ

2

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

+0

Он отлично работает при использовании MySQL. Кажется, что он только терпит неудачу с SQL Server. – Anthony

2

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

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

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

+0

Решил проблему прямого направления для меня на SQL Server 2000 с JTDS 1.2.7 при использовании setFirstResult(), спасибо! – user2172816

0

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

org.hibernate.dialect.SQLServerDialect 

к этому

org.hibernate.dialect.SQLServer2005Dialect 

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

Публикуется как примечание для людей, проверяющих их диалект.