我有一个'用户'表,有很多列,其中两个是'用户名'和'密码' username是主键列
我想更新用户名的密码。这是我的代码,它工作正常(没有错误或异常),但没有更新密码。
我是Hibernate的新手,并且不太了解它的语法。请帮帮我
String query = "UPDATE users SET Password = '"+ newPassword +"' WHERE Username = '"+ login.getUsername() + "'";
session.createSQLQuery(query);
login.getUsername()正确获取所需的用户名
其余代码工作正常,问题出在上面的代码中。
答案 0 :(得分:9)
您刚刚创建了一个查询,但尚未执行:
SQLQuery sqlQuery = session.createSQLQuery(query);
sqlQuery.executeUpdate();
请注意
'
-
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();
}
答案 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.load
或session.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();