我是hibernate的初学者。我正在尝试使用HQL的一个最简单的例子,但是当我尝试迭代list时,它会在第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();
}
}
答案 0 :(得分: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(int i = 0; i<l.size(); i++){
Employee emp = (Employee)l.get(i);
System.out.println(emp);
}
答案 1 :(得分:0)
next()
中的 Iterator
将返回列表中的一个对象。所以,它应该如下所示:
Employee e =(Employee)itr.next();
如果您使用泛型类型,即使您不需要再次投射。