在以下代码示例中:
Session session = getSessionFactory().openSession();
MyObject currentState = (MyObject)
session.get(MyObject.class, id, new LockOptions(LockMode.???));
if (!statusToUpdateTo.equals(currentState.getStatus())) {
tx = session.beginTransaction();
currentState.setStatus(statusToUpdateTo);
session.save(currentState);
tx.commit();
}
session.close();
正如您可能希望从代码中解释的那样,这个想法是检查我们的商店并找到具有给定 id 的对象,然后将其更新为给定状态。如果我们发现对象已经处于我们想要更新的状态,我们放弃做任何事情。否则,我们更新状态并将其保存回商店。
我担心的是,如果其中几个请求同时通过,并且都尝试读取和更新同一个对象怎么办?纵观文档,Hibernate 似乎“通常会自动获得完全正确的锁定级别”。(LockMode.class),但我仍然热衷于确保只有一件事可以读取对象,做出需要更新它的决定,然后更新它 - 没有任何其他线程对同一个数据库条目做同样的事情。
从 LockMode 类我认为PESSIMISTIC_WRITE 是我所追求的,但似乎无法找到证实这一点的文档资源。有没有人能够为我确认这一点,并且上面的代码会做我所追求的?