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