Hibernate中的java.lang.ClassCastException

Hibernate中的java.lang.ClassCastException,java,hibernate,jakarta-ee,exception,object,Java,Hibernate,Jakarta Ee,Exception,Object,我有两个表,比如Doctor和shift,通过Hibernate查询语言,我从Doctor表中选择了两个字段,在单个查询中从shift表中选择了两个字段 所以我面临一个显示数据的问题。 我为此编写了一个beancals,比如DoctorShift将列表转换为list我得到了java.lang.ClassCastException,那么该怎么办呢 给同样的想法 code is like this Query qry="-----";//valid query List<DoctorShi

我有两个表,比如
Doctor
shift
,通过Hibernate查询语言,我从
Doctor
表中选择了两个
字段,在单个查询中从
shift
表中选择了两个字段 所以我面临一个显示数据的问题。 我为此编写了一个
bean
cals,比如
DoctorShift
将列表转换为
list
我得到了
java.lang.ClassCastException
,那么该怎么办呢 给同样的想法

code is like this

Query qry="-----";//valid query

List<DoctorShift> list=(List<DoctorShift>)qry.list();
System.out.println(" Size of list is "+list.size());// i'm getting 2

DoctorShift ds=list.get(0);// here i'm getting Exception




qry="select s.shiftNameId,s.shiftName,d.doctorRegnumvar,"
      +"d.doctorFnamevar,d.doctorLnamevar,d.doctorstatus," 
      +"sm.shiftstatus,s.shiftTime from ShiftDaoBean s,"
      + "DoctorDaoBean d,DoctorShiftMappingBean sm where "
      +"d.doctorid=sm.doctoridfk and  s.shiftID=sm.shiftidfk"
      +" and d.doctorid=:doctorID ";
代码是这样的
查询qry=“----”//有效查询
List=(List)qry.List();
System.out.println(“列表大小为”+list.Size());//我得了2分
DoctorShift ds=list.get(0);//我这里有个例外
qry=“选择s.shiftNameId、s.shiftName、d.doctorRegnumvar,”
+“d.doctorFnamevar,d.DoctorNamevar,d.doctorstatus,”
+“sm.shiftstatus,s.shiftTime来自ShiftDaoBean s,”
+DoctorDaoBean d,DoctorShiftMappingBean sm其中
+“d.doctorid=sm.doctoridfk和s.shiftID=sm.shiftidfk”
+“和d.doctorid=:doctorid”;
帮帮我


提前感谢

我想你可以通过两种方式做你想做的事:

1) 在DoctorShift类中创建构造函数,该类接受所有必要的参数,并在HQL查询中使用此构造函数创建对象:

qry="select new com.yourpackage.DoctorShift(s.shiftNameId,s.shiftName,d.doctorRegnumvar,"
      +"d.doctorFnamevar,d.doctorLnamevar,d.doctorstatus," 
      +"sm.shiftstatus,s.shiftTime) from ShiftDaoBean s,"
      + "DoctorDaoBean d,DoctorShiftMappingBean sm where "
      +"d.doctorid=sm.doctoridfk and  s.shiftID=sm.shiftidfk"
      +" and d.doctorid=:doctorID ";
2) 获取对象[]数组的列表,而不是doctorshift对象的列表。每个数组将表示结果集中的行。例如:

Query qry="-----";//valid query

List<Object[]> list=(List<Object[]>)qry.list();
System.out.println(" Size of list is "+list.size());// i'm getting 2

Object[] firstRow =list.get(0);

System.out.println(firstRow[0]);// will output shiftNameId
System.out.println(firstRow[1]);// will output shiftName
...
Query qry=“------”//有效查询
List=(List)qry.List();
System.out.println(“列表大小为”+list.Size());//我得了2分
Object[]firstRow=list.get(0);
System.out.println(第一行[0]);//将输出shiftNameId
System.out.println(第一行[1]);//将输出shiftName
...

在第二种情况下,您的查询仍然与您发布的相同。

否则您可以使用ResultTransformer在bean中加载数据。可能会有帮助

你能展示你的注释类吗?事实上,我不会在任何地方配置DoctorShift类。如果需要,请告诉我怎么做。。