zoukankan      html  css  js  c++  java
  • 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();

      所以问题归根纠结于就是类型不匹配,无法进行转换,问题就这样解决了!!!

      我的项目中使用下面注释的内容,即会显示正确了。所以这两个问题,通常关联出现,记录学习一下啦。

  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/goloving/p/7526212.html
Copyright © 2011-2022 走看看