步骤1在一个线程中,我从Hibernate会话中的DB获取ID 1的员工并关闭会话
步骤2我开始了会话2,更新了id 1的员工姓名。
步骤3现在回到线程1,我在分离实例中更改了员工姓名。然后打开Hibernate会话并更新db中的emp
我期待并发更新异常,因为线程2更新了中间版本。为什么不抛出它?我想我在这里缺少一些概念,但不确定是什么?
这是相关代码:-
线程1
Step 1
Employee Employee1=(Employee)session.get(Employee.class, 1);
session.close();
Step 2
// Start new Thread i.e Thread 2 and update Employee in between
Makes sure thread 2 is done before proceeding to step3
Step 3
Employee.setName("EmployeeUpdated");
session = factory.openSession();
tx = session.beginTransaction();
session.update(Employee);
tx.commit();// expect the concurrent update here
session.close();
线程2
Thread(SessionFactory factory){
this.factory = factory; // same factory as used in Thread1
}
public void run() {
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Employee Employee1=(Employee)session.get(Employee.class, 1);
tx.commit();
session.close();
session = factory.openSession();
tx = session.beginTransaction();
Employee1.setName("EmployeeUpdatedByThread2");
session.merge(Employee1);
tx.commit();
session.close();
}
hibernate在更新时是否需要显式配置来检查版本?
我需要在对象下的版本属性上添加@Version(我们在其中启用乐观锁定)才能使用乐观锁定。这个链接帮助很大。