一個工程,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 閱讀(590)
評論(0) 編輯 收藏