zoukankan      html  css  js  c++  java
  • 关于java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 实体类

    由于业务逻辑的复杂,有些sql语句写法hql不支持,所以hibernate查询直接用了sql原生查询,由于数据结果根据四个表查询出来,所以无法使用方法.addEntity(XXXXXXX.class);把结果转对象,就这样以对象数组的形式传到了Action层,

    然而Action层传到前台需要对数据进行封装一下(前台用的easyui,数据展示根据key名获取value值),所以进行转化(就在这浪费了我近两天的时间,气!),由于是对象数组的形式,网上搜索各种方法进行取值都无效,后来在impl层,把返回的格式返回为Pagenate<Object[]>形式,(原来是Pagenate<实体类>),在前台一顿遍历封装(取值方式采用的是下标取值,感谢https://blog.csdn.net/zb0567/article/details/7183043),然后成功

    知识点:

    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的原贴

    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

    List abc = zzteledao.GetUser("select aa,bbfrom cc where id="+ id);
    
    
    List temp=(List)abc.get(0);
    
    

    这时会爆出如题的错误,是因为select出来的是一个object,两个项目,debug出来的像list一样,l但是转换还是出错

    后来改成如下

    if (abc != null) {
    
    Object[] le = (Object[]) abc.get(0);
    
    aa= le[0].toString();
    
    bb= le[1].toString();
    
    }

    即可解决

    另外一种就是Lei{aa,bb}这样的类,用类来替代

    Lei temp=(Lei)abc.get(0)
  • 相关阅读:
    C# 为WebBrowser设置代理,打开网页
    C# WebBrowser 设置代理完全解决方案
    java读取文件的几种方式性能比较
    .NET 对文件和文件夹操作的介绍
    java利用反射打印出类的结构
    java输出月的日历控制台
    java 实现二分查找算法
    java实现快速排序
    解决window 12 service 不能调用excel ,报"System.Runtime.InteropServices.COMException (0x800A03EC)
    3 webpack 4 加vue 2.0生产环境搭建
  • 原文地址:https://www.cnblogs.com/wjup/p/10576105.html
Copyright © 2011-2022 走看看