随笔 - 3  文章 - 8  trackbacks - 0
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔档案(8)

文章档案(1)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

一个工程,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();
后,在开发机上运行时正常,但是在服务器上运行时报错,错误内容就是反过来的:整型不能转换成常整型。

出错的行所在的函数:
    /** *//**
     * 总排行榜
     * 
@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;
    }



后来注意到现在用的机器的cpu是DualCore Pentium E2140,是64位的,而服务器是Xeon Prestonia 2.8GHz,是32位。很可能是64位与32位的问题,可能64位机上的整型到了32位机上就被认为是长整型。经询问后得知,把出错行改为:
((Number)o[0]).intValue();
用Integer和Long的超类Number,问题解决。
原来以前听说的类定义尽量宽泛一些是这个好处啊。
posted on 2008-04-14 18:50 cccp21 阅读(583) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: