精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-13
今天调试程序,以前好好的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(); 或 int count = ((Integer)q.uniqueResult()).intValue(); 改成 int count = ((Number)q.uniqueResult()).intValue(); 这样就可以两个版本同时兼容.
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-13
nt count = ((Number)q.uniqueResult()).intValue();
我都整这个用 新写得都统一long |
|
返回顶楼 | |
发表时间:2008-11-14
laiseeme 写道 nt count = ((Number)q.uniqueResult()).intValue(); 我都整这个用 新写得都统一long 是啊,一开始确定使用hibernate3.2以上版本的时候,最好都统一这么写,就不会出现问题。 但是有好多系统是升级过来的,所以对以前的程序可以采用上面说的第一种方式来达到兼容的目的。 |
|
返回顶楼 | |
发表时间:2008-11-14
哈哈,谢谢楼主啦!我经常遇到这个问题,今天看了楼主的贴,真是收益匪浅啦!
|
|
返回顶楼 | |
浏览 3760 次