0

我是 hibernate 的初学者。我正在尝试使用 HQL 的最简单示例,但是当我尝试迭代列表时,它会在第 25 行 ClassCastException 生成异常。当我尝试转换迭代器的 next() 方法返回的对象时,它会生成相同的问题。我无法确定问题。请给我解决问题的方法。

Employee.java

package one;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {
@Id
private Long id;
private String name;
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Employee(Long id, String name) {
    super();
    this.id = id;
    this.name = name;
}
public Employee()
{

}

 } 


Main2.java

package one;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Main2 {

public static void main(String[] args) {

    SessionFactory sf=new Configuration().configure().buildSessionFactory();
    Session s1=sf.openSession();
    Query q=s1.createQuery("from Employee ");
    Transaction tx=s1.beginTransaction();

    List l=q.list();
    Iterator itr=l.iterator();
    while(itr.hasNext())
    {
        Object obj[]=(Object[])itr.next();//Line 25 
        for(Object temp:obj)
        {
        System.out.println(temp);   
        }
    }

    tx.commit();
    s1.close();
    sf.close();

}

}
4

2 回答 2

1

它应该是

Employee emp =(Employee)itr.next();//Line 25 

您选择所有员工(“来自员工”)并遍历包含所有员工实体的结果列表。无需强制转换为 object[]。

迭代循环中的 for 循环也应该过时。

编辑:下面的代码应该做你想做的事情。

List l=q.list(); // you retrieve a List of Employee entities (the result of your query)
Iterator itr=l.iterator();
while(itr.hasNext())
{
    Employee emp = (Employee)itr.next();
    System.out.println(emp);   
    }
}

迭代器的替代方案可能是索引 for 循环,例如:

for(int i = 0; i<l.size(); i++){
  Employee emp = (Employee)l.get(i);
  System.out.println(emp);
}
于 2013-11-13T09:01:57.730 回答
0

next()inIterator将返回列表中的一个对象。因此,它应该如下所示:

Employee e =(Employee)itr.next();

如果您使用泛型类型,即使您无需再次转换。

于 2013-11-13T09:05:55.827 回答