作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我目前正在开发的应用程序中,我有数据结构:
Bucket [1] ------ [Many] Element
现在我可以查看何时可以添加删除和修改元素。现在我遇到多个用户正在编辑同一个存储桶的情况,他们可能会搞砸其他人的编辑。我想通过每次保存数据时检查和更新存储桶版本来解决这个问题。
JPA 有自己的版本,所以我打算重用它。但是 JPA 在其元素更新时自愿不更新 Bucket 版本。有没有什么好方法可以在 JPA 中强制对实体进行版本更新?
目前我发现了一些建议,比如创建虚拟字段、拥有自己的版本字段,或者分离和合并实体。我觉得它们都不对,有什么更好的吗?
如果有帮助,我正在将 eclipse 链接与 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);
}
关于java - 如何对实体实现版本更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419350/
我是一名优秀的程序员,十分优秀!