Hibernate3.2的count返回值的问题
2010-12-21 23:07
381 查看
我的代码如下[/b]
经排查,最终确定:[/b]
由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改成了 Long,
因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。
如果你从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();
@Override public int getTotal() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); return ((Long) session.createQuery( "select count(area) from Area area").iterate().next()) .intValue(); }
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
经排查,最终确定:[/b]
由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改成了 Long,
因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。
如果你从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();
相关文章推荐
- 关于Hibernate3.2的count返回值的问题
- 关于在Hibernate里使用select count(*) 返回值的问题说明
- 关于在Hibernate里使用select count(*) 返回值的问题说明
- (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- hibernate3.2查询记录数 的相关问题
- 关于Hibernate读取select count(*)的返回值到底是Long还是Integer
- _RecordsetPtr::RecordCount返回值为-1的问题
- 关于Hibernate select count(*)返回值为Long还是Integer?
- 集成Struts1.x + Hibernate3.2的时候出现jar包冲突的问题
- Hibernate 3.2 与MySQL 5.6插入中文乱码问题
- 关于Hibernate的sql查询返回值的问题
- Hibernate使用count(*)取得表中记录总数(跨Hibernate3.x版本问题)(转)
- struts1.3 spring2.5 hibernate3.2问题解决过程
- Hibernate count映射问题
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- 解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题
- Spring2.5、Struts2.1、Hibernate3.2、sitemesh、freemarker整合开发常见问题及解决方案
- 解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题
- MyEclipse下完美解决Hibernate 3.2与Spring 2.0+冲突问题
- hibernate中使用max返回值问题