關於java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 實體類

因爲業務邏輯的複雜,有些sql語句寫法hql不支持,因此hibernate查詢直接用了sql原生查詢,因爲數據結果根據四個表查詢出來,因此沒法使用方法.addEntity(XXXXXXX.class);把結果轉對象,就這樣以對象數組的形式傳到了Action層,

然而Action層傳到前臺須要對數據進行封裝一下(前臺用的easyui,數據展現根據key名獲取value值),因此進行轉化(就在這浪費了我近兩天的時間,氣!),因爲是對象數組的形式,網上搜索各類方法進行取值都無效,後來在impl層,把返回的格式返回爲Pagenate<Object[]>形式,(原來是Pagenate<實體類>),在前臺一頓遍歷封裝(取值方式採用的是下標取值,感謝https://blog.csdn.net/zb0567/article/details/7183043),而後成功java

知識點:sql

hibernate 中createQuery與createSQLQuery二者區別是:
前者用的hql語句進行查詢,後者能夠用sql語句查詢
前者以hibernate生成的Bean爲對象裝入list返回,後者則是以對象數組進行存儲
因此使用createSQLQuery有時候也想以hibernate生成的Bean爲對象裝入list返回,就不是很方便
忽然發現createSQLQuery有這樣一個方法能夠直接轉換對象
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 表明以hibernate生成的Bean的對象,也就是數據表映射出的Bean。可是這個bean必須有映射數組

https://blog.csdn.net/zb0567/article/details/7183043的原貼session

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast toui

List abc = zzteledao.GetUser("select aa,bbfrom cc where id="+ id);


List temp=(List)abc.get(0);

這時會爆出如題的錯誤,是由於select出來的是一個object,兩個項目,debug出來的像list同樣,l可是轉換仍是出錯.net

後來改爲以下hibernate

if (abc != null) {

Object[] le = (Object[]) abc.get(0);

aa= le[0].toString();

bb= le[1].toString();

}

便可解決debug

另一種就是Lei{aa,bb}這樣的類,用類來替代code

Lei temp=(Lei)abc.get(0)
相關文章
相關標籤/搜索