因爲業務邏輯的複雜,有些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)