java.lang.ClassCastException:org.hibernate.internal.QueryImpl不能强制转换为com.models.User
我有一个这样构造的用户表java.lang.ClassCastException:org.hibernate.internal.QueryImpl不能强制转换为com.models.User,java,hibernate,hql,Java,Hibernate,Hql,我有一个这样构造的用户表 id name email 1 cc cc@yahoo.com 2 rr rr@yahoo.com 3 cc cc@yahoo.com 我正在编写一个查询来保存日志,当它发现一封电子邮件与下面的hql匹配时 String hql = "FROM User c WHERE c.email = :email order by c.id"; return (User) _session
id name email
1 cc cc@yahoo.com
2 rr rr@yahoo.com
3 cc cc@yahoo.com
我正在编写一个查询来保存日志,当它发现一封电子邮件与下面的hql匹配时
String hql = "FROM User c WHERE c.email = :email order by c.id";
return (User) _sessionFactory.getCurrentSession().createQuery(hql).setParameter("email", email);
当我运行我的代码时,我得到了这个错误
java.lang.ClassCastException: org.hibernate.internal.QueryImpl cannot be cast to com.models.User
at com.models.UserDao.getByEmail(UserDao.java:62)
您忘记调用以获取第一个结果,代码应该是:
return (User) _sessionFactory.getCurrentSession().createQuery(hql)
.setParameter("email", email)
.uniqueResult();
实际上,您之所以会出现此错误,是因为您试图将查询
实例强制转换为用户
,而这是无法完成的,您需要先执行查询以获取用户
实例
如果你想得到几个结果,然后考虑使用,那么代码将是类似的:
return (List<User>) _sessionFactory.getCurrentSession().createQuery(hql)
.setParameter("email", email)
.list();
return(List)\u sessionFactory.getCurrentSession().createQuery(hql)
.setParameter(“电子邮件”,电子邮件)
.list();
最后似乎忘记调用getResultList()
方法
return (List<User>) _sessionFactory.getCurrentSession().createQuery(hql)
.setParameter("email", email)
.getResultList();
return(List)\u sessionFactory.getCurrentSession().createQuery(hql)
.setParameter(“电子邮件”,电子邮件)
.getResultList();
您应该注意到,由于您期望的结果不止一个,因此需要稍微更改此命令或使代码适应返回的位置。您必须从查询中提取结果。可以通过使用提取单个对象
.createQuery(hql).getSingleResult();
你期待一个结果吗?或者多个?多个结果似乎您缺少命令结尾处的
.getResultList()
。@Francis因此将其强制转换为用户对象没有任何意义,因为结果将为您提供其他内容,您需要获得第一个结果,然后将其强制转换为用户。如果我想获得第三行呢,这就是为什么我问他是否需要一个或多个结果@尼古拉斯·菲洛托