一个工程,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) 编辑 收藏