[问题] 一直在使用Hibernate提供的通用分页机制,在通过查询api设置分页后,执行查询一直正常。突一日,使用包装了这部分的分页组件的W君,报告分页查询时,抛出奇怪异常,数据库是Sybase:
09:26:24,265 [main] ERROR JDBCExceptionReporter : JZ0BT: 类型 TYPE_FORWARD_ONLY 的 ResultSets 不支持 absolute(int) 方法。
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2214)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
at org.hibernate.loader.Loader.list(Loader.java:2090)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:150)
Caused by: java.sql.SQLException: JZ0BT: 类型 TYPE_FORWARD_ONLY 的 ResultSets 不支持 absolute(int) 方法。
at com.sybase.jdbc3.jdbc.ErrorMessage.raiseError(ErrorMessage.java:515)
at com.sybase.jdbc3.jdbc.SybResultSet.checkForScrollability(SybResultSet.java:1757)
at com.sybase.jdbc3.jdbc.SybResultSet.absolute(SybResultSet.java:717)
at org.apache.commons.dbcp.DelegatingResultSet.absolute(DelegatingResultSet.java:334)
at org.hibernate.loader.Loader.advance(Loader.java:1469)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1783)
at org.hibernate.loader.Loader.doQuery(Loader.java:662)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2211)
[探幽]
从异常看,第一反应,好像是查询时未设置游标类型,导致不支持调用absolute调用。这不是一个老生长谈的问题么,难道Hibernate在建立连接时,未设置相应属性?但不可能啊,Hibernate的分页查询要有这么大的BUG,也不用等我来发现了。在查看Hibernate的代码后,也看到它明确设置了游标类型;
第二反应,Sybase驱动或Sybase版本问题?之前在jconn2、jconn3驱动上做过单元测试,没有问题,为了确认,再跑了几次,没有问题。还有,报出问题的Sybase版本与测试的Sybase版本基本一致,只有小版本差异,应该不会有多大问题。所以,也不太可能;
第三反应,算了先不想了,Google吧,也许人家是早就搞定过的问题了。于是填入多个搜索词+Sybase的错误码->GO,奇怪,确实有两个提问这个的,csdn上一个,hibernate论坛上一个,一看都是05年的了,而且代码设置分页的代码和我一模一样,看看回答,结果不多,全看下来,大概都是和我第一反应和第二反应相同的思路,而后续竟淹没无解了......
难道。。。难道Sybase真和Hibernate不对付,偶尔不爽了就发个飚,摆上一道?否则怎么没碰到其他数据库报这个问题?
[解难]
歇了一晚,回头再想想,觉得不甘心,又总觉得哪有不妥,记得原来在调用Hibernate的api,设置firstResult时,是直接通过页数,算出第一行记录的:
query.setFirstResult((pq.getPageIndex()-1) * pq.getPageRows());
这和Hibernate论坛上提问的那位代码一致,当初在通过页码计算首记录位置时,曾闪过:如果计算得到负数,Hibernate会报错么。基于MySQL的测试表明,Hibernate好像是把负数忽略了,变成从0开始,后来在Sybase上的测试,分页数都是正确的,没有再试过负页数。现在据说报错也是偶然发生,那是不是有可能:在偶然输入错误的分页数时,负分页数直接传到了后台给hibernate,然后sybase在接受这个负参数时报出异常;而其他时候又运行正常。
想到这,我眼睛一亮:),立即掏出Eclipse,祭出JUnit,在原来的测试上加上负页数的输入断言,然后选择在Sybase上运行...... 整个世界清静了,W君报告的偶发错误终于重现——JZ0BT。由亮而暗,我的眼里透出了一丝苦涩,唉,又是一个低级错误啊,当初要不是太相信Hibernate,多加上输入参数校验,也不会搞出这一档子事啊!
分享到:
相关推荐
NULL 博文链接:https://liuu.iteye.com/blog/316558
经络学说中存在的瑕疵与疑惑,王维兵,王玉玲,目的:分析经络学说中存在的瑕疵与疑惑,为修正经络学说奠定基础。方法:以《内经》、《难经》、高校教材《经络学》等为依据,与
《甲乙经》是中国古典医学经典著作,作者皇甫谧主要参考了《素问》、《灵枢》、《难经》、《伤寒论》和《明堂孔穴针灸治要》等书籍。 6. 明代主要针灸著作有: A.《针灸大全》、B.《针灸问对》、C.《针灸聚英》、D...
“脾裹血”功能与实质的现代释义,刘雅峰,王佳,经考证历史文献,结合临床实践认为,《难经》中提出的
ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告)【ASP】
Cycle GAN和Pix2Pix都是强大的图像到图像的转换模型,但它们在应用场景、技术特点和训练数据要求等方面有所不同。Cycle GAN无需成对数据即可进行训练,适用于更广泛的图像转换任务;而Pix2Pix则依赖于成对数据进行训练,在处理具有明确对应关系的图像对时表现较好。在实际应用中,应根据具体任务和数据集的特点选择合适的模型。Cycle GAN广泛应用于各种图像到图像的转换任务,如风格迁移、季节变换、对象变形等。 由于其不需要成对数据的特性,Cycle GAN能够处理更广泛的图像数据集,并产生更多样化的结果。Pix2Pix是一个基于条件生成对抗网络(Conditional Generative Adversarial Networks, cGANs)的图像到图像的转换模型。它利用成对数据(即一一对应的图像对)进行训练,以学习从输入图像到输出图像的映射。Pix2Pix的生成器通常采用U-Net结构,而判别器则使用PatchGAN结构。
tensorflow安装
Webmanage-Username
愤怒的小鸟2_3.22.0_彭于晏Crack
ASP.NET交通信息网上查询系统的设计与实现(源代码+论文+开题报告)【ASP】
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
如题,ESRI官方下载的ArcGIS Runtime SDK for .NET v100.15.0官方开发包(官方原版),方便没有帐号的朋友们下载。包含实例数据和帮助文档。
疫情信息管理-基于springboot疫情信息管理系统设计与实现
基于ASP的反垃圾邮件管理系统的设计(源代码+论文)【ASP】
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
tensorflow安装
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
b站和抖音教程很详细,自己查阅喽,很简单也很好用!b85主板通过PCI接口使用NV m.2硬盘,很好用!
素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,...请问,第100002(十万零二)个素数是多少? 请注意:“2”是第一素数,“3”是第二个素数,依此类推。不需要提交源代码,只要写出准确的结果即可!
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。