2014-11-20 15 views
5

Ich habe Klasse Login, die userId, username und password hat.Abfrage im Ruhezustand mit Where-Klausel

Für einen Benutzer, der mich anmeldet, überprüfe ich username und password und geting userId. Wenn userId nicht Null ist, wird es zur Startseite führen. Ich versuche dies im Winterschlaf zu machen. Aber meine Abfrage funktioniert nicht

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, Keine Notwendigkeit von ":" :) –

+1

Erhalten Sie irgendwelche Ausnahmen? Oder nur eine leere Ergebnisliste? Bitte posten Sie weitere Details zu _ "meine Anfrage funktioniert nicht" _. – icza

+0

Also, welchen Fehler haben Sie vor? jede Ausnahme .. – RE350

Antwort

6

1) Sie verwenden HQL, so müssen Sie verstehen, dass Sie keine Spaltennamen geben kann, die in Projektionen der Abfrage HQL in der Datenbank sind

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

Hier In Ihrer Login-Klasse haben Sie kein Feld als user_id und Sie gaben user_id in Projektionen. HQL bildet die Klasse mit der Datenbank ab, daher wird die Login-Klasse eine Login-Tabelle und das userId-Feld eine user_id-Spalte in der Datenbank sein. Und was Sie geschrieben haben, ist reine SQL-Abfrage und keine HQL-Abfrage.

Bitte verwenden Sie diese HQL-Abfrage.

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

Hier Log ist Alias-Namen wie wir in Plain Java tun.

Login log=new Login() 
log.userId 
2

Versuchen Sie nicht, Doppelpunkt zu verwenden, während Sie den Parameter einstellen.

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