2015-08-08 2 views
2

У меня есть код:java.math.BigInteger не может быть приведен к java.util.List весной проект

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 = "[email protected]"; 
    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 

Я искал в Google, где-то говорит,

return ((BigInteger)LoginStudent.get(0)).longValue(); 

Но как я должен использовать это?

+0

Когда вы запустите sql '", выберите stu_id, имя от студента, где username = "[email protected]", какой результат вы получаете? – Lucky

ответ

2

Изменение HQL для

String hql = "from Student where username = '[email protected]'"; 
students = (List<Student>) sessionFactory.getCurrentSession().createQuery(hql).list(); 

JavaDoc для uniqueResult говорит

Convenience method to return a single instance that matches the query, or null if the query returns no results.

Но вам нужно List<Student> получить, так что используйте list().

+0

Я использовал список() ..... Я получаю Ошибка: --- java.math.BigInteger не может быть отнесен к com.student.pack.Student – Salini

+0

Какая строка эта ошибка от? –

+0

return students.get (0); ----- эта строка – Salini

0

Пожалуйста, измените линию от

students = (List<Student>) sessionFactory.getCurrentSession().createSQLQuery(hql).uniqueResult(); 

в

students = (List<Student>) (sessionFactory.getCurrentSession().createSQLQuery(hql).uniqueResult()); 

Дайте попробовать, он должен работать, если uniqueResult() возвращает список студента объектов

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", "[email protected]") 
    .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; 

Причина, по которой вам нужно сделать это, заключается в том, что вы выбираете определенное поле из Student в своем запросе hql. См https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select

0

Или объявить конструктор так ваш запрос работает следующим образом:

select new Student(s.stu_id,s.name) from Student s where... 

Это должно сделать это.

Смежные вопросы