使用where子句在hibernate中选择查询

时间:2014-11-20 07:49:16

标签: java mysql hibernate

我的课程登录有userIdusernamepassword

要让用户登录,我正在检查usernamepassword以及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();
    }

2 个答案:

答案 0 :(得分:6)

1)您正在使用HQL,因此您需要了解您无法在HQL查询的投影中提供数据库中的列名

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

在您的登录类中,您没有user_id字段,并且您已将user_id投放到投影中。 HQL映射类与数据库,因此Login类将登录表,userId字段将是数据库中的user_id列。您编写的是纯SQL查询而不是HQL查询。

请使用此HQL查询。

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

这里的log是别名,就像我们在普通Java中一样。

Login log=new Login()
log.userId

答案 1 :(得分:3)

设置参数时尽量不要使用冒号。

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