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();

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

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

  • 相关阅读:
    BW中变量增强学习
    视频压制参数设置详细说明(转)
    swf文件格式解析(二)
    关于FP10.2的自定义鼠标功能
    swf文件格式解析(一)
    如何判断winform程序已安装过
    flashbuilder4.5 作为eclipse插件
    安装程序无法创建新的系统分区,也无法定位现有系统分区 (转载于百度文库)
    【转】VS2008建造打包法度将安装路径写入注册表
    【高清视频压制教程】使用MeGUI压制视频教程(以PSP视频为例)(转载)
  • 原文地址:https://www.cnblogs.com/goloving/p/7526212.html
Copyright © 2011-2022 走看看