java.math.BigInteger无法在Spring项目中强制转换为java.util.List

时间:2015-08-08 14:20:15

标签: java spring hibernate hql

我有代码:

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();

但我必须如何使用它?

4 个答案:

答案 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...

应该这样做。