繁体   English   中英

默认情况下,乐观锁定在休眠状态下起作用吗?

[英]Is optimistic locking work by default in hibernate?

步骤1在一个线程中,我从休眠会话中的数据库中获取了ID为1的Employee并关闭了该会话

第2步,我开始了第2课,更新了ID为1的员工姓名。

步骤3现在回到线程1,我在分离的实例中更改了员工名称。然后打开休眠会话并更新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();
}

休眠时需要休眠配置来检查版本吗?

我需要在对象的版本属性下添加@Version(我们启用乐观锁定)以使用乐观锁定。此链接有很大帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM