You can't operate on a closed ResultSet!!!
抛异常的代码:
((Long) getHibernateTemplate().iterate(query).next()).intValue()
异常信息中提示ResultSet已关闭:
Caused by: org.hibernate.exception.GenericJDBCException: could not get next iterator result at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) at org.hibernate.impl.IteratorImpl.next(IteratorImpl.java:161) at com.yotoo.crm.dao.VisitLogDaoImp.findCountByCriteria(VisitLogDaoImp.java:98) at com.yotoo.crm.service.impl.VisitLogServiceImp.findAllVisitLog(VisitLogServiceImp.java:46) at com.yotoo.crm.service.impl.VisitLogServiceImp$$FastClassByCGLIB$$4353dcb1.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55) ... 34 more Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:130) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed(SQLServerResultSet.java:211) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getLong(SQLServerResultSet.java:2058) at org.apache.commons.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:278) at org.apache.commons.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:278) at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:61) at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:229) at org.hibernate.impl.IteratorImpl.next(IteratorImpl.java:140) ... 41 more
问题原因:
调查了半天,还好一位网友的贴子帮我解决了问题,原来Hibernate中如果没有进行事务的配置,resultSet会关闭掉。
解决方法:
在spring的配置文件中添加事务的配置(如果你已经添加,那就不用了),然后在调用出错的Service或DAO中开启事务(添加一个注解:@Transaction)
帮我解决问题的是这个贴子,谢谢这位兄台:
http://my.oschina.net/yotoo/blog/264341