Java 无法强制转换迭代器对象

Java 无法强制转换迭代器对象,java,iterator,hql,classcastexception,named-query,Java,Iterator,Hql,Classcastexception,Named Query,我编写此代码是为了将迭代器对象强制转换为预定义对象,但它失败并引发类强制转换异常: public ArrayList<Session> getAllSessions() { ArrayList<Session> sessions = new ArrayList<Session>(); Query sessionsQuery = null; sessionsQuery = this.getSession().getNamedQuery(

我编写此代码是为了将迭代器对象强制转换为预定义对象,但它失败并引发类强制转换异常:

public ArrayList<Session> getAllSessions() {

    ArrayList<Session> sessions = new ArrayList<Session>();
    Query sessionsQuery = null;
    sessionsQuery = this.getSession().getNamedQuery("getAllSessions");
    Iterator trainees = sessionsQuery.list().iterator();

    while (trainees.hasNext()) {
        sessions.add((Session) trainees.next());
    }
    return sessions;

}


java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Session
public ArrayList getAllSessions(){
ArrayList会话=新建ArrayList();
查询会话Query=null;
sessionsQuery=this.getSession().getNamedQuery(“getAllSessions”);
迭代器受训者=SessionQuery.list().Iterator();
while(培训生.hasNext()){
sessions.add((Session)培训生.next());
}
返回会议;
}
java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换到会话
查询:

<sql-query name="getAllSessions"><![CDATA[ select ss.ID,ss.NAME from SESSION_ ss where ss.ISDELETED<>1]]></sql-query>
1]]>

这里的问题是什么?

解决您的问题的最佳解决方案是

return sessionsQuery.list();
在上面的问题中,您使用迭代器迭代列表,并再次将其存储到ArrayList中,而不需要创建对象

相反,返回您从上述代码中获得的列表

看到你的名字查询后,我发现它会给你

   List<Object[]> 

如果你看(我的)文件

以列表形式返回查询结果。如果查询包含多个结果前置行,则结果将在对象[]的实例中返回

它返回一个
对象[]
列表,其中每个
对象[]
表示一行,当您尝试将此
对象[]
强制转换为
会话时,会出现错误

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Session

您的查询不返回
列表
,而是返回
列表
,因为它查询两个属性(
ID
NAME

您不应该使用SQL,而应该使用HQL。您的查询应该是

select s from Session s where s.deleted = false
(假设您的实体有一个布尔类型的
已删除
字段)


您还应该将实体重命名为Session以外的其他名称,因为它与Hibernate会话类型冲突。

显示您的命名QueryId您是否为
会话
实体类添加注释?使用?
select s from Session s where s.deleted = false