簡體   English   中英

使用where子句在hibernate中選擇查詢

[英]select query in hibernate with where clause

我有類登錄,其中包含userIdusernamepassword

對於用戶登錄,我正在檢查usernamepassword以及geting 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();
    }

1)您正在使用HQL,因此您需要了解您不能在HQL查詢的投影中給出數據庫中的列名

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

在您的Login類中,您沒有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

設置參數時盡量不要使用冒號。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM