日期:2014-05-20  浏览次数:20873 次

Hibernate取数据类型转换不同机器不同结果
一个工程,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();