`
yongtree
  • 浏览: 233972 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

hibernate升级到3.2带来的count、sum等查询的兼容性问题

阅读更多

     今天调试程序,以前好好的hibernate查询,突然开始报ClassCastException,出现的语句都是出现在count查询数据条数的hql语句处,说类型为java.lang.Long。奇怪了啊,以前好好地啊。

上网一查,原来是hibernate从3.1升到3.2带来的兼容性问题。

具体说明:

     从Hibernate 3.0.x/3.1.x升级到最新的3.2版之后,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。

这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。

 

Hibernate Team也提供了一个与原来兼容的解决方案:

Configuration classicCfg = new Configuration();
classicCfg.addSqlFunction( "count", new ClassicCountFunction());
classicCfg.addSqlFunction( "avg", new ClassicAvgFunction());
classicCfg.addSqlFunction( "sum", new ClassicSumFunction());
SessionFactory classicSf = classicCfg.buildSessionFactory();

int count = ((Integer)q.uniqueResult()).intValue();

改成 int count = ((Number)q.uniqueResult()).intValue(); 这样就可以两个版本同时兼容.

 

分享到:
评论
5 楼 huangshs8405 2008-11-14  
楼上的坐我前面
4 楼 endeavor416 2008-11-14  
哈哈,谢谢楼主啦!我经常遇到这个问题,今天看了楼主的贴,真是收益匪浅啦!
3 楼 yongtree 2008-11-14  
laiseeme 写道

nt count = ((Number)q.uniqueResult()).intValue(); 我都整这个用 新写得都统一long

是啊,一开始确定使用hibernate3.2以上版本的时候,最好都统一这么写,就不会出现问题。
但是有好多系统是升级过来的,所以对以前的程序可以采用上面说的第一种方式来达到兼容的目的。
2 楼 laiseeme 2008-11-13  
nt count = ((Number)q.uniqueResult()).intValue();
我都整这个用 新写得都统一long
1 楼 quxman 2008-11-13  
学习    

相关推荐

    hibernate升级到3.2带来EHCache的问题

    NULL 博文链接:https://yongtree.iteye.com/blog/272293

    hibernate帮助文档 3.2、3.6、4.1

    Hibernate 3.6系列是3.x版本线中的长期支持(LTS)版本,带来了更多的稳定性和兼容性。3.6.10修复了大量的bug,并引入了对Java EE 6的兼容性,包括对JSR-303(Bean Validation)的支持,使得对象验证更加方便。此外...

    Hibernate 参考文档 3.2

    Hibernate 参考文档 3.2 初学Hibernate必备文档!

    Hibernate\hibernate3.2官方中文参考手册PDF

    以上只是《Hibernate 3.2 官方中文参考手册》中的一部分内容,实际文档中还包括了更多的细节,如查询优化、性能调优、 Hibenate与Spring的整合、复杂查询示例等。通过深入学习和实践,开发者能够充分利用Hibernate的...

    hibernate 2.1 和3.2的中文参考手册

    在《Hibernate中文手册3.2》中,你将详细学习到如何配置Hibernate,创建实体类,定义映射文件或使用注解,以及如何执行CRUD操作。文档还会深入讲解事务管理、关联映射(如一对一、一对多、多对一、多对多)、继承...

    hibernate_3.2官方开发包

    这个“hibernate_3.2官方开发包”包含了源码、文档、示例等,可以帮助开发者深入了解Hibernate 3.2的每一个细节,无论是初学者还是经验丰富的开发者,都能从中受益。学习和掌握Hibernate,将极大地提升你在Java企业...

    hibernate3.2

    hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2hibernate3.2...

    hibernate-3.2源代码

    《深入剖析Hibernate 3.2源代码...通过深入学习Hibernate 3.2的源代码,开发者不仅可以了解其实现原理,还能在遇到问题时更快定位,进行定制化开发。同时,这也有助于理解ORM框架的工作方式,提升软件设计和开发能力。

    hibernate-3.2 jar包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许...总的来说,“hibernate-3.2 jar包”是Java开发中一个重要的工具,它极大地简化了数据库操作,提高了开发效率,同时也为项目提供了良好的可维护性和可扩展性。

    hibernate 3.2卷二

    hibernate 3.2 hibernate 3.2 hibernate 3.2 hibernate 3.2 hibernate 3.2

    Hibernate3.1/3.2.jar包

    - **配置项目:** 在Eclipse中,需将Hibernate库(包括`hibernate3.1/3.2.jar`)添加到项目的构建路径中,并设置相应的Hibernate配置文件。 - **代码生成:** 插件可以自动生成实体类、DAO层以及Service层代码,加速...

    hibernate架包3.2

    此外,3.2版本还优化了性能,增强了查询功能,比如HQL(Hibernate Query Language)和Criteria API,使得开发者可以更灵活、更高效地进行数据检索。 在提供的压缩包中,`hibernate3.jar`是Hibernate的核心库,包含...

    hibernate-3.2 源码

    在Hibernate-3.2中,配置文件通常为`hibernate.cfg.xml`,包含了数据库连接信息、实体类映射、缓存策略等设置。通过`Configuration`类加载配置,然后构建SessionFactory。 三、实体类与映射文件 Hibernate通过ORM...

    hibernate-reference-3.2中文版

    此外,还会涉及到 Criteria的子查询、关联查询和分页查询等高级用法。 除了基本功能,Hibernate 3.2还引入了对JPA(Java Persistence API)的支持,这是Java EE 5和6标准的一部分,旨在为ORM提供统一的接口。文档会...

    Hibernate 中文手册 3.2.pdf

    但可以肯定的是,这些内容通常会包括配置Hibernate环境、建立实体类与数据库表的映射关系、使用HQL或Criteria进行查询、会话管理和事务管理、二级缓存的使用、性能优化技巧等。 从给出的信息中,我们可以提取与...

    Hibernate-3.2-API

    Hibernate-3.2-API, CHM格式

    Hibernate高官谈Hibernate3.2新特性.html

    Hibernate高官谈Hibernate3.2新特性

    Hibernate参考文档3.2.rar

    《Hibernate参考文档3.2》是Java开发领域中关于Hibernate框架的一个重要参考资料,它详细介绍了Hibernate 3.2版本的功能、用法以及API。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者在Java应用程序...

Global site tag (gtag.js) - Google Analytics