一個(gè)工程,Hibernate3.1 + MySQL4.1,本來(lái)沒(méi)問(wèn)題,最近開(kāi)發(fā)機(jī)換了,出現(xiàn)問(wèn)題:
在開(kāi)發(fā)機(jī)上運(yùn)行時(shí),報(bào)錯(cuò):
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
錯(cuò)在這一行:
int count = ((Integer)o[0]).intValue();
但是在服務(wù)器上運(yùn)行時(shí)正常。
把這一行改為
int count = ((Long)o[0]).intValue();
后,在開(kāi)發(fā)機(jī)上運(yùn)行時(shí)正常,但是在服務(wù)器上運(yùn)行時(shí)報(bào)錯(cuò),錯(cuò)誤內(nèi)容就是反過(guò)來(lái)的:整型不能轉(zhuǎn)換成常整型。
出錯(cuò)的行所在的函數(shù):
/** *//**
* 總排行榜
* @return List類(lèi)型,原本是ArrayList型,元素是包含項(xiàng)目序號(hào)和名稱的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;
}
后來(lái)注意到現(xiàn)在用的機(jī)器的cpu是DualCore Pentium E2140,是64位的,而服務(wù)器是Xeon Prestonia 2.8GHz,是32位。很可能是64位與32位的問(wèn)題,可能64位機(jī)上的整型到了32位機(jī)上就被認(rèn)為是長(zhǎng)整型。經(jīng)詢問(wèn)后得知,把出錯(cuò)行改為:
((Number)o[0]).intValue();
用Integer和Long的超類(lèi)Number,問(wèn)題解決。
原來(lái)以前聽(tīng)說(shuō)的類(lèi)定義盡量寬泛一些是這個(gè)好處啊。
posted on 2008-04-14 18:50
cccp21 閱讀(591)
評(píng)論(0) 編輯 收藏