读书人

HQL 报 java.lang.ClassCastException

发布时间: 2014-01-26 14:37:31 作者: rapoo

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应该没有错?难道出来的不是对象?请问应该如何解决这个异常 java.lang.ClassCastException?

------解决方法--------------------------------------------------------
1)
不懂hibernate,
但是你这SELECT语句:select student.name from Student student,为什么from 后面要两个Student?(虽然它也可以执行,不理解

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


------解决方法--------------------------------------------------------
可能是ORM的错误,能把错误都弄出来就好一些了,你的hql语句没有错,
------解决方法--------------------------------------------------------
Query query=s.createQuery("select student.name from Student student");
这句代码返回的是name属性集合,而不是student实例
所以
Student st=(Student)it.next();
会出现classCastException
------解决方法--------------------------------------------------------
s.createQuery("from Student student");这样就行啦,会返回整个Student对象的

------解决方法--------------------------------------------------------
String studentName=(String)it.next();

        

读书人网 >Java Exception

热点推荐