如何使用Hibernate SQL查询更新单元格数据

时间:2012-06-08 12:14:08

标签: sql hibernate hql

我有一个'用户'表,有很多列,其中两个是'用户名'和'密码' username是主键列

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

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

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

 session.createSQLQuery(query);

login.getUsername()正确获取所需的用户名

其余代码工作正常,问题出在上面的代码中。

3 个答案:

答案 0 :(得分:9)

您刚刚创建了一个查询,但尚未执行:

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

请注意

  • 您应该使用命名参数而不是连接参数。这可以防止SQL注入攻击,或者只是在密码或用户名包含'
  • 时出现错误
  • 在Hibernate中,您通常使用以下命令执行此类简单操作:

-

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

答案 1 :(得分: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注入攻击,或者只是依赖于您的字符串的错误。请查看HQLCriteria

答案 2 :(得分:0)

希望这可以帮助像我这样的人

如果我们直接对一个字段进行更新,则会将所有其他字段设置为其默认值。

Session session = factory.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.password("xxxxx");
session.update(user);
tx.commit();
session.close();

以上代码将所有其他字段设置为默认值。因此,为避免这种情况,我们必须从表中获取对象,然后对其进行修改并执行更新操作。

我们可以使用session.loadsession.get来获取对象并对其进行更新。

代码

User u = session.load(User.class, userName);
u.setPassword(newPassword);

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

,然后需要执行session.update(user)

完整代码:

        SessionFactory factory = hibernateUtils.getSessionFactory();
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();
        User user = session.load(User.class, username);
        user.setPassword("xxxxxx");
        session.update(user);
        tx.commit();
        session.close();