1. 程式人生 > >Hibernate中用hql查詢部分欄位 可解決異常java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

Hibernate中用hql查詢部分欄位 可解決異常java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

hql查詢單表部分欄位:

在hibernate中,用hql語句查詢實體類,採用list方法的返回結果為一個List,該List中封裝的物件分為以下三種情況:

1.查詢全部欄位的情況下,如"from 實體類",list中封裝的物件為實體類本身,各屬性都將得到填充。

2.只查詢一個欄位,預設情況下,list中封裝的是Object物件。

3.查詢兩個或兩個以上的欄位,預設情況下,list中封裝的是Object[],長度與所查詢的欄位數一致。

對於後兩種情況,用標籤遍歷時不太方便,因為無法直接轉換成實體類的物件。比較簡單的解決方法是:

在hql中使用 select new 包名.類名(屬性1,屬性2……) from實體類,同時在實體類中新增帶參的構造方法,引數的個數和順序與(屬性1,屬性2……)保持一致,這樣我們得到的list中存放的依然是實體類的物件,所查詢到的屬性得到了填充,使用起來更為方便。

hql查詢多表部分欄位:

select new 包名.表1實體類名(表1.屬性1,表2.屬性2……) from 表1實體類,表2實體類 where表1.ID=表2.ID(即相關聯的欄位),同時在要返回的表1實體類中新增表2的屬性和帶參的構造方法,引數的個數和順序與(表1.屬性1,表2.屬性2……) 保持一致