![](/img/trans.png)
[英]Cast hibernate Query result to Object of type class instead of list array
[英]Hibernate Query result cannot be cast to List<Subject>
Session s = ...;
String query = "from pojo.Subject sub inner join sub.students stu group by "
+ "stu.FName having count(sub.subName) > 1";
Query q = s.createQuery(query);
List<Subject> list = q.list();
for (Subject subj : list) {//error occurs here..
System.out.println(subj.getSubName()+" - "+subj.getDay());
}
它给我一个错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to pojo.Subject
at hibernm.Application.main(Application.java:39)
我知道我可以通过以下方式检索数据:
for (int i = 0; i < list.size(); i++) {
Object get = list.get(i);
System.out.println(get);
}
但这对我来说似乎根本不是正确的方法。 所以我尝试介绍另一个
列出并迭代它:
List<Subject> myList = new ArrayList<>();
for (final Object o : q.list()) {
myList.add((Subject) o);//error occurs here..
}
但这给了我同样的结果。
所以希望你们让我明白。 提前致谢。
这是因为您选择的不是Subject
而是inner joined
列集,所以它不会给您List<Subject>
而是包含包括Student
和Student
的列在内的列数组的List<Object[]>
,可能是List<Object[]>
因此,为了处理您的查询结果,您可以喜欢(或尝试通过调试检查查询结果):
Query query = session.createQuery(query);
List<Object[]> listResult = query.list();
for (Object[] aRow : listResult) {
Subject subject = (Subject) aRow[0];
Student student = (Student) aRow[1];
//do your code
}
线程“主”中的异常java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为pojo.Subject位于hibernm.Application.main(Application.java:39)
转换为:您不能将Object
Array
转换为Subject
。
如果您查看Hibernate API文档 ,将会发现
public List list() throws HibernateException
以列表形式返回查询结果。 如果查询在行前包含多个结果 ,则结果将在Object []的实例中返回。
在您的情况下,这正是发生的情况- 每行获得多个结果 -由于内部连接,每个Subject
和一个Student
。
我认为@Jan所说的是正确的,但是由于您只想要Subject的结果,我认为您可以执行以下操作:
String query = "Select sub from pojo.Subject sub inner join sub.students stu group by "
+ "stu.FName having count(sub.subName) > 1";
和
Query q = s.createQuery(query, Subject.class);
List<Subject> list = q.getResultList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.