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)
  • 相关阅读:
    #Bug--Mapper资源加载不到
    Spring项目用JUnit调试时出现错误 Failed to load ApplicationContext 的解决方法
    安装和配置maven遇到的坑
    DataGrip 异常
    数据库-1055报错-把only_full_group_by去掉
    spring boot 配置logback.xml 日志重复打印
    eclipse创建maven项目
    【C++11新特性】 C++11智能指针之weak_ptr
    socket编程中的粘包问题解决方案
    c++的反映机制实现
  • 原文地址:https://www.cnblogs.com/wjup/p/10576105.html
Copyright © 2011-2022 走看看