繁体   English   中英

休眠查询结果无法转换为列表<Subject>

[英]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>而是包含包括StudentStudent的列在内的列数组的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM