unexpected token: * 和 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 解決辦法


一、unexpected token: *  的解決辦法

  首先要搞清楚sql與hql的區別!

  sql操作的是數據庫表,而hql操作的是對象

  sql中“select * from table”,而hql中" from table對象"

  因為sql用慣了,習慣*,但是hql不認識!

  試試:直接 from 對象看看!

  辦法:String hql = "from KmToolclickCnt where 1=1 ";

@Override public GenuineManagementStatic queryNewVersion(Integer softId) { /*return (GenuineManagementStatic) getSession().createQuery(" select * from vrv_paw_genuineManagementStatic where softId=:softId order by version desc LIMIT 0,1 ") .setParameter("softId", softId).uniqueResult();*/ List<GenuineManagementStatic> list = getSession().createQuery(" from " + this.clazz.getName() + " this WHERE this.softId=:softId order by version desc LIMIT 0,1") .setParameter("softId", softId) .list();//返回list集合 if (list.size() > 0) { return list.get(0);//返回list集合里第一個對象 } return null; }

  上面采用注釋的那段就會報  unexpected token: *   的錯誤。采用下面的就可以了。

  同時注意:先獲取到  list  ,再return list里面的某個對象。不這樣做的話,也會報一些其他的錯誤。

二、java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.vrv.paw.domain.GenuineManagementStatic解決方法:

@Override
    public GenuineManagementStatic queryNewVersion(Integer softId) {
        return (GenuineManagementStatic) getSession().createSQLQuery(" select * from vrv_paw_genuineManagementStatic where softId=:softId order by version desc LIMIT 0,1 ")
                .setParameter("softId", softId).uniqueResult();
        /*List<GenuineManagementStatic> list = getSession().createQuery(" from " + this.clazz.getName() + " this WHERE this.softId=:softId  order by version desc LIMIT 0,1")
                .setParameter("softId", softId)
                .list();
        if (list.size() > 0) {
            return list.get(0);
        }
        return null;*/
    }

  這樣就會報上面的異常。

hibernate中createSQLQuery與createQuery的區別:

  前者用的hql語句進行查詢;后者可以用sql語句查詢

  前者以hibernate生成的Bean為對象裝入list返回;后者則是以對象數組進行存儲

  所以使用createSQLQuery有時候也想以hibernate生成的Bean為對象裝入list返回,就不是很方便,不過createSQLQuery有這樣一個方法可以直接轉換對象

  Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class)      XXXXXXX 代表以hibernate生成的Bean的對象,也就是數據表映射出的Bean

//hql語句:對每個月的數據進行統計
 String hql = "select sum(sto_Sum) , sum(sto_SumPrice) ,sum(sto_SaleNum) ,sum(sto_SaleNum*sto_SalePrice) from Stock WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( addDate, '%Y%m' ) ) =1"; Query query = session.createSQLQuery(hql).addEntity(Stock.class);//關鍵步驟
 list = query.list();

  所以問題歸根糾結於就是類型不匹配,無法進行轉換,問題就這樣解決了!!!

  我的項目中使用下面注釋的內容,即會顯示正確了。所以這兩個問題,通常關聯出現,記錄學習一下啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM