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)
  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/wjup/p/10576105.html
Copyright © 2011-2022 走看看