为什么用“Query query=s.createQuery("select student.name from Student student")”,就会出现“java.lang.ClassCastException”类型

javaxman 2006-01-20 09:20:46
package com.yourcompany.hibernate;

import java.util.*;

import org.hibernate.*;
import org.hibernate.cfg.Configuration;



public class Find
{

//public void doit()
public static void main(String bb[])
{
try
{
Configuration c=new Configuration();
Configuration cc=c.configure();
SessionFactory sf=cc.buildSessionFactory();
Session s=sf.openSession();
//Query query=s.createQuery("from Student d");
//Query query=s.createQuery("from Student where id=11");
Query query=s.createQuery("select student.name from Student student");
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext())
{
Student st=(Student)it.next();
System.out.print(st.getName());
}
s.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

}

我的HQL应该没有错?难道出来的不是对象?请问应该如何解决?
...全文
350 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2006-01-21
  • 打赏
  • 举报
回复
s.createQuery("from Student student");这样就行啦,会返回整个Student对象的
Octer 2006-01-21
  • 打赏
  • 举报
回复
楼主,你应该Debug一下,看it.next()返回对象是什么类型,一切就知晓了
哎,为什么你不去自己动动手了
javaxman 2006-01-21
  • 打赏
  • 举报
回复
明白了,那我需要怎么修改?
Saro 2006-01-21
  • 打赏
  • 举报
回复
String studentName=(String)it.next();
cenlmmx 2006-01-21
  • 打赏
  • 举报
回复
学习
javaxman 2006-01-21
  • 打赏
  • 举报
回复
Debug怎么调试?我没有作过。
Octer 2006-01-20
  • 打赏
  • 举报
回复
Query query=s.createQuery("select student.name from Student student");
这句代码返回的是name属性集合,而不是student实例
所以
Student st=(Student)it.next();
会出现classCastException
rnwoxn 2006-01-20
  • 打赏
  • 举报
回复
可能是ORM的错误,能把错误都弄出来就好一些了,你的hql语句没有错,
yuzl32 2006-01-20
  • 打赏
  • 举报
回复
1)
不懂hibernate,
但是你这SELECT语句:select student.name from Student student,为什么from 后面要两个Student?(虽然它也可以执行,不理解,楼主能解释下吗?

2) 既然不允许自动转换,那么就强制转化试试:Query query=(Query)s.createQuery(..

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧