2014-11-20 4 views
5

У меня есть класс, в котором есть userId, username и password.выберите запрос в спящем режиме, где статья

Для входа в систему Я проверяю username и password и получаю userId. Если userId не равно нулю, это приведет к главной странице. Я пытаюсь сделать это в спящем режиме. Но мой запрос не работает

public int userLogin(Login login) 
     throws MySQLIntegrityConstraintViolationException, SQLException, 
     Exception { 

    Session session = HibernateUtil.getSessionFactory().openSession(); 
    int userId = 0; 

    try { 
      session.beginTransaction(); 
      String hql = "Select log.userId from Login log where log.userName=:userName 
      and log.password=:password";  
      System.out.println(hql); 
      Query query = session.createQuery(hql); 
      query.setParameter(":userName", login.getUserName()); 
      query.setParameter(":password", login.getPassword()); 
      List result = query.list(); 

      System.out.println("resultset:"+result); 

      Iterator iterator = result.iterator(); 
      while(iterator.hasNext()){ 
       userId = (int) iterator.next(); 


     } 
    } catch (HibernateException e) { 
     if (session.getTransaction() != null) { 
      session.getTransaction().rollback(); 
     } 
    } finally { 
     session.close(); 
    } 
+0

@AbhikChakraborty, No need of ":" :) –

+1

Есть ли исключения? Или просто пустой список результатов? Пожалуйста, напишите более подробную информацию о _ «мой запрос не работает» _. – icza

+0

Итак, с какой ошибкой вы столкнулись? любое исключение .. – RE350

ответ

6

1) Вы используете HQL, так что вы должны понять, что вы не можете дать имена столбцов, которые содержаться в базе данных в проекции HQL запрос

String hql = "select user_id from login where user_name= :username and 
      password= :password"; 

Здесь в вашем классе входа у вас нет поля user_id, и вы дали user_id в проекции. HQL отображает класс с базой данных, поэтому класс входа будет в таблице входа, а в поле userId будет поле user_id в базе данных. И то, что вы написали, - это простой SQL-запрос, а не запрос HQL.

Используйте этот запрос HQL.

String hql="Select log.userId from Login log where log.username=:username and log.password=:password" 

Здесь журнал - это псевдоним, как в обычной Java.

Login log=new Login() 
log.userId 
2

Не пытайтесь использовать двоеточие, задавая параметр.

query.setParameter("userName", login.getUserName());