JPA:为什么在删除实体之前锁定它?

时间:2015-02-13 15:06:08

标签: java hibernate jpa concurrency locking

我遇到了一些代码,在删除它之前立即在实体上设置了读锁定。我仍然在努力掌握锁定概念,所以也许我在这里遗漏了一些东西,但我认为没有任何好处。我的理解是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);

持久性提供程序是休眠的。

1 个答案:

答案 0 :(得分:0)

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

为了防止这样的情况:

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