我有代码:
public Student LoginStudent(Student student) {
List<Student> students = new ArrayList<Student>();
sessionFactory.getCurrentSession().getTransaction().begin();
String hql = "select stu_id,name from student where username = "ap@gmail.com";
students = (List<Student>) sessionFactory.getCurrentSession().createSQLQuery(hql).uniqueResult();
if (students.size() > 0) {
return students.get(0);
} else {
return null;
}
}
我收到错误
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.util.List
我搜索谷歌,某处暗示,
return ((BigInteger)LoginStudent.get(0)).longValue();
但我必须如何使用它?
答案 0 :(得分:2)
将hql更改为
String hql = "from Student where username = 'ap@gmail.com'";
students = (List<Student>) sessionFactory.getCurrentSession().createQuery(hql).list();
uniqueResult
的javadoc说
返回与查询匹配的单个实例的便捷方法,如果查询未返回结果,则返回null。
但您需要List<Student>
来检索,因此请使用list()
。
答案 1 :(得分:0)
请更改
中的行students = (List<Student>) sessionFactory.getCurrentSession().createSQLQuery(hql).uniqueResult();
到
students = (List<Student>) (sessionFactory.getCurrentSession().createSQLQuery(hql).uniqueResult());
尝试一下,如果uniqueResult()返回学生对象列表
,它应该有效答案 2 :(得分:0)
要让你的hql工作,你需要做这样的事情:
Student student = null;
sessionFactory.getCurrentSession().getTransaction().begin();
String hql = "select stu_id,name from student where username = :username";
Object[] result = sessionFactory.getCurrentSession()
.createSQLQuery(hql)
.setParameter("username", "ap@gmail.com")
.uniqueResult();
if(result != null) {
// manually convert your selection into a Student
student = new Student();
s.setId((Long) result[0]);
s.setName((String) result[1]);
}
return student;
您必须这样做的原因是您在hql查询中选择Student中的某个字段。见https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select
答案 3 :(得分:0)
或者声明一个构造函数,这样你的查询就像这样:
select new Student(s.stu_id,s.name) from Student s where...
应该这样做。