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

问题描述 投票:5回答:3

我有一个表'users',有很多列,其中两个是'Username'和'Password'用户名是主键列

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

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

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

 session.createSQLQuery(query);

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

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

sql hibernate hql
3个回答
9
投票

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

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

请注意

  • 您应该使用命名参数而不是连接参数。这样可以防止SQL注入攻击,或者仅当密码或用户名包含'
  • 时发生错误
  • 在Hibernate中,您通常使用以下简单的操作:

-

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

3
投票

您只是忘记了execute方法,他们:

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


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();
© www.soinside.com 2019 - 2024. All rights reserved.