sql
  • hibernate
  • hql
  • 2012-06-08 66 views 2 likes 
    2

    我有一个表“用户”,有许多列,其中两个是“用户名”和“密码” 用户名是主键列如何更新使用Hibernate SQL查询

    我想更新密码单元中的数据为用户名。这是我的代码,它工作正常(没有错误或异常),但没有更新密码。

    我是Hibernate的新手,不太了解它的语法。请帮我

    String query = "UPDATE users SET Password = '"+ newPassword +"' WHERE Username = '"+ login.getUsername() + "'"; 
    
    session.createSQLQuery(query); 
    

    login.getUsername()越来越需要用户名正确的代码

    剩下的就是做工精细的问题是在上面的代码。

    回答

    6

    您刚才创建的查询,但是你有没有执行它:

    SQLQuery sqlQuery = session.createSQLQuery(query); 
    sqlQuery.executeUpdate(); 
    

    注意

    • 你应该使用而不将参数命名参数。这将防止SQL注入攻击,或干脆错误当密码或用户名包含'
    • 在Hibernate中
    • ,你通常做这样简单的操作搭配:

    -

    User u = session.get(User.class, userName); 
    u.setPassword(newPassword); 
    
    +0

    我可以使用第二种方法更新连续的单个单元格,因为我试过但休眠使所有其他单元格为空 – Androider

    +0

    是的,你可以。如果它将其他单元格设置为空,这意味着您已经完成了上述以外的其他操作。 –

    3

    你刚才忘了执行方法,他们:

    String query = "UPDATE users SET Password = '"+ newPassword +"' WHERE Username = '"+   login.getUsername() + "'"; 
    try { 
        s.getTransaction().begin(); 
        s.createSQLQuery(query).executeUpdate(); 
        s.getTransaction().commit(); 
        s.close(); 
    } 
    catch (HibernateException erro){ 
        s.getTransaction().rollback(); 
        s.close(); 
    } 
    

    我强烈建议你不要使用连接参数,以防止SQL中jection攻击,或只是依赖于您的字符串的错误。看看HQLCriteria

    相关问题