如何对实体实施版本更新?

How to enforce version update on entity?

在我目前正在开发的应用程序中,我有数据结构:

                  Bucket [1] ------ [Many] Element

现在我可以查看何时可以添加删除和修改元素。现在我遇到多个用户正在编辑同一个存储桶的情况,他们可能会搞砸其他人的编辑。 我想通过每次保存数据时检查和更新存储桶版本来解决这个问题。

JPA 有自己的版本,所以我打算重用它。但是 JPA 在其元素更新时自愿不更新 Bucket 版本。有什么好方法可以在 JPA 中对实体执行版本更新吗?

目前我找到了一些建议,比如创建虚拟字段,拥有自己的版本字段,或者分离和合并实体。我觉得没有一个是对的,有什么更好的吗?

如果有帮助,我正在使用 eclipse link 和 spring 数据。

您可以使用 OPTIMISTIC_FORCE_INCREMENT 锁定在关系更改时强制更新您的 Bucket 实体(即在一对多集合对象中添加和删除元素)。如果在不知道关系更新的情况下进行更改,这将导致任何其他持久性上下文中的任何更新失败。

示例:

public void addElement(int bucketId, Element element) {
    Bucket bucket = em.find(Bucket.class, bucketId);
    em.lock(bucket, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
    bucket.add(element);
    element.setBucket(bucket);
}