如何对实体实施版本更新?
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);
}
在我目前正在开发的应用程序中,我有数据结构:
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);
}