【问题标题】:cannot be cast to [Ljava.lang.Object无法转换为 [Ljava.lang.Object
【发布时间】:2011-11-22 06:33:47
【问题描述】:
try{
    Session session = sessionFactory.openSession();
    Criteria critSelectedResumes = session.createCriteria(SelectedResumes.class);
    critSelectedResumes.createAlias("resumeStatusId", "rsi");
    critSelectedResumes.add(Restrictions.eq("rsi.resumeStatusId", 2));
    Iterator ite;
    ite = critSelectedResumes.list().iterator();
    {
            while (it.hasNext()){
            Object[] pair = (Object[]) ite.next();
            SelectedResumes selectedResumes = (SelectedResumes)pair[0];
            ResumeStatus resumeStatus = (ResumeStatus) pair[1];

我收到了这个错误

SelectedResumes cannot be cast to [Ljava.lang.Object;

不知道是什么原因

谢谢

【问题讨论】:

  • 错误发生在哪一行?
  • Object[] 对 = (Object[])ite.next();这一行

标签: hibernate


【解决方案1】:

您已设置查询以返回SelectedResumes 的列表:

Criteria critSelectedResumes = session
        .createCriteria(SelectedResumes.class);

并且您将列表元素转换为Object[](又名[Ljava.lang.Object):

Object[] pair = (Object[]) ite.next();

【讨论】:

    【解决方案2】:

    既然您已经为 SelectedResumes 类创建了一个 Criteria 对象:

    Criteria critSelectedResumes = session.createCriteria(SelectedResumes.class);
    

    然后你在它上面调用list()而不指定任何投影,这个方法调用将返回一个java.util.ListSelectedResumes对象。你可以用它做的是:

    List<?> resultList1 = critSelectedResumes.list();
    

    List<SelectedResumes> resultList2 
                = (List<SelectedResumes>)critSelectedResumes.list();
    

    Iterator<SelectedResumes> iter =      
            (List<SelectedResumes>)critSelectedResumes.list().iterator();
    

    然后你可以继续

    for(SelectedResumes selectedResumes:resultList2 ) {
          //do something with the SelectedResumes object
    }
    

     while (it.hasNext()){
           SelectedResumes selectedResumes  = iter.next();
          //do something with the SelectedResumes object
     }
    

    org.hibernate.Criteria.list() 方法返回一个java.util.List,无论您的查询应该返回什么(通常是bean 或投影键/值对的数组——如数组列表)。它不返回数组或其他任何东西。

    【讨论】:

    • 它的工作很酷。但是如果我有多个表并且需要从两个表中获取数据而不是标准在这种情况下的工作方式。表示它将如何获取和迭代数据。
    【解决方案3】:

    您正在尝试将单个对象 selectedresumes 转换为数组。

    我会改成这样:

    List<SelectedResumes> resumeList = critSelectedResumes.list();
    
    for(SelectedResume selectedResume : resumeList){
    ...
    //do stuff to  selectedResume
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 2016-09-05
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多