在我正在开发的应用程序中,我有数据结构:
Bucket [1] ------ [Many] Element
现在我可以添加删除和修改元素了。现在我有多个用户正在编辑相同的存储桶的情况,他们可以搞砸其他编辑。 我想通过每次保存数据时检查和更新存储桶版本来解决此问题。
JPA有自己的版本,所以我打算重用它。但是当JPA元素更新时,JPA心甘情愿地不会更新Bucket版本。有没有一种很好的方法如何在JPA中对实体实施版本更新?
目前我发现了一些建议,比如创建虚拟字段,拥有自己的版本字段,或者分离和合并实体。不是他们似乎对我来说,是否更好?
如果有帮助,我正在使用带有弹簧数据的eclipse链接。
答案 0 :(得分:5)
当关系发生更改时(即添加和删除一对多集合对象中的元素),您可以使用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);
}