0

我无法从 HQL 迭代结果列表。我正在使用 foreach 循环。但是循环没有在我的名为 getCompanyies() 的 struts 操作方法中执行。我正在控制台中获取列表的大小,但跳过 for 循环可能是因为我没有在控制台中收到“inside for”消息。我收到 java.lang.IllegalStateException 异常

我的行动代码是:-

public String getCompanies(){
    try{
    session.beginTransaction();
    System.out.println("inside get companies");
    List<Company> companies= session.createQuery("select companyID,companyName from Company").list();
    System.out.println(companies.size());
    for(Company obj : companies) {
        System.out.println("inside for");
        System.out.println(obj.getCompanyID());
    }
    }catch(HibernateException e){
        e.printStackTrace();
    }
    session.close();
    return SUCCESS;
}
4

1 回答 1

1

这是因为公司List中的对象不是类型Company(您可能在分配列表时收到警告),因为您在HQL查询中选择了 companyID,companyName。

可以快速帮助您摆脱困境的方法就是重写您的查询:

List<Company> companies= session.createQuery("from Company").list();

因为您的第一个查询将返回一个包含您请求的两个属性的对象数组。(您将获得 aList<Object[]>并且必须从此数组中获取值),因此您的代码如下所示:

List<Object[]> companies= session.createQuery("select companyID,companyName from Company").list();

而且您必须在结果列表的每个数组上获取值。

于 2013-03-22T11:48:44.733 回答