0
public void updateUserState(User user) {
        Session sess=getSession();
        sess.setFlushMode(FlushMode.MANUAL);
        String queryStr = "update User usr set usr.logCount = :logCount , usr.isLocked = :isLocked , usr.lastLogin = :lastLogin where usr.userId=:userId";
        Query query=null;
        query = sess.createNativeQuery(queryStr);
        query.setParameter("logCount", user.getLogCount());
        query.setParameter("isLocked", user.getIsLocked());
        query.setParameter("lastLogin", user.getLastLogin());
        query.setParameter("userId", user.getUserId());
        query.executeUpdate();
}

这是我的代码。这不会更新数据库中的 mu 用户表,也不会引发任何错误。它反映了设置参数之前的正确值,但在执行更新之后,我在表中看不到任何更新。如果你们中的任何人能告诉我,我哪里错了,那就太好了。提前致谢!

4

1 回答 1

0

根据休眠文档刷新类型MANUAL假设:

会话刷新被委托给应用程序,该应用程序必须Session.flush()显式调用才能应用持久性上下文更改。

因此,您应该Session.flush()在方法结束时显式调用。

您的updateUserState方法也应该在事务中运行:

Session sess = getSession();
sess.setFlushMode(FlushMode.MANUAL);
Transaction txn = sess.beginTransaction();
// ...
query.executeUpdate();

sess.flush();
txn.commit();
session.close();
于 2020-10-07T08:25:51.867 回答