当前位置: 代码迷 >> J2EE >> Hibernate取数据类型转换不同机器不同结果,该如何解决
  详细解决方案

Hibernate取数据类型转换不同机器不同结果,该如何解决

热度:322   发布时间:2016-04-22 03:34:22.0
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();
  相关解决方案