一个工程,Hibernate3.1 + MySQL4.1,本来没问题,最近没动它却出问题:
在开发的机器上运行时,报错:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
错在这一行:
int count = ((Integer)o[0]).intValue();
但是在作为服务器的机器上运行时正常。
把这一行改为
int count = ((Long)o[0]).intValue();
后,在开发的机器上运行时正常,但是在作为服务器的机器上运行时报错,错误内容就是反过来的:整型不能转换成常整型。
这是怎么回事呢?
出错的行所在的函数:
- Java code
/** * 总排行榜 * @return List类型,原本是ArrayList型,元素是包含项目序号和名称的ArrayList型 */ public List getZong() { ArrayList alist = new ArrayList(); org.hibernate.Session s = HibernateSessionFactory.currentSession(); String hql = "select count(x.xmh),x,m from Xzb x,Xmb m where x.xmh=m.xh and m.sc=0 group by x.xmh order by col_0_0_ desc"; org.hibernate.Query query = s.createQuery(hql); query.setMaxResults(7); List list = query.list(); Object[] o = null; for (Iterator its = list.iterator(); its.hasNext(); ) { o = (Object[])its.next(); Xzb xzb = (Xzb)o[1]; ArrayList tmplist = new ArrayList(); Xmb xmb = xzb.getXmh(); tmplist.add(xmb.getXh()); tmplist.add(xmb.getXmm()); int count = ((Integer)o[0]).intValue(); //int count = ((Long)o[0]).intValue(); tmplist.add(count); alist.add(tmplist); } HibernateSessionFactory.closeSession(); return alist; }
------解决方案--------------------
既然这样改之后你的本机开发机上能跑正常,那你就要查一下你服务器机上的环境了,比如jdk什么的,work缓存什么的
------解决方案--------------------
你能确定用的hibernate jar包相同吗,hibernate3.0和hibernate 3.2 count出来的对象类型不同,3.0Integer 3.2 Long,不会使用了两个jar包吧
------解决方案--------------------
((Number)o[0]).intValue();