java - 使用 JPA 进行合并操作的乐观锁定

标签 java hibernate jpa

我的生产代码运行了两年。现在我们注意到Update操作存在并发问题。我正在使用 JPA 作为我的 ORM。在更新请求中我正在使用

this.entityManager.merge(entity);

现在我们想使用乐观锁来避免这种并发。我在谷歌上做了一些搜索。我认为下面会照顾

this.entityManager.lock(entity, LockModeType.OPTIMISTIC);

这里我怀疑我们是否真的需要表中的@Version。我想我的客户现在不会同意添加此栏目。

有人可以告诉我有没有更好的方法来处理这种情况。

最佳答案

嗯,在 JPA 中,没有。 JPA 使用版本列来保持其一致性,并且似乎没有任何方法可以解决这个问题。

在 Hibernate 中,有一些语义可以解决这个问题:

Optimistic-lock = ‘all’

当您将 Hibernate 映射文件中元素的乐观锁属性设置为值“all”时,您是在告诉 Hibernate 检查自检索持久对象以来以及更新数据库中的行之前,关联行中的列是否未发生更改。

了解更多:http://www.intertech.com/Blog/hibernate-optimistic-lock-without-

关于java - 使用 JPA 进行合并操作的乐观锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29472689/

相关文章:

java - 加入 hql hibernate 的预期路径

java - JSON 查询不更新 TextView

java - 我的 Java 枚举类的格式正确吗?

java - 我相信 Eureka 为作为 aws 服务的注册实例生成私有(private)/内部 IP 地址

java - "Is not mapped"与 Hibernate 的期望

java - 带有参数名和值的分组依据的 JPA 命名查询

java - 如何在 Oracle 10gR2 和 JPA 中做到不区分大小写和不区分重音?

java - MySQL 数据库表未更新

java - 从 MySQL 数据库获取日期对象并将其显示在格式化文本字段上

Hibernate/JPA - 如何在不触发延迟加载的情况下获取@ManyToOne 字段的 id