【问题标题】:JPA: Why lock an entity before removing it?JPA:为什么要在删除实体之前锁定它?
【发布时间】:2015-02-13 15:06:08
【问题描述】:

我遇到了一些代码,其中在删除实体之前立即在实体上设置了读取锁定。我仍在努力掌握锁定概念,所以也许我在这里遗漏了一些东西,但我认为这没有任何好处。我的理解是 READ 锁会在提交事务之前检查版本是否未更改,但在删除实体之前阻止更改对我来说似乎毫无意义。

在删除实体之前将其锁定是否会增加任何好处/安全措施?
这很常见吗?

代码看起来像这样...

服务层:

getDAO().readLock(entity);
getDAO().delete(entity);

用于锁的 DAO 层:

//Code Specifies LockModeType.READ
T mergedObject = getEntityManager().merge(object);
manager.lock(mergedObject, lockMode);
//

用于删除的 DAO 层:

T mergedObject = getEntityManager().merge(object);
getEntityManager().remove(mergedObject);

持久性提供程序处于休眠状态。

【问题讨论】:

    标签: java hibernate jpa concurrency locking


    【解决方案1】:

    它确保实体在您的版本检查和删除之间不会从外部更改。

    为了防止这样的情况:

    1. 你:选择(不锁定)
    2. 外部进程:更新实体(因为它未锁定)
    3. 您:按 id 删除 - 您删除了包含重要用户更改的更新版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2011-04-22
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多