java - 如何解决hibernate中乐观锁(Versioning)的问题?

标签 java hibernate hibernate-mapping

我知道,可以使用以下代码来实现乐观锁定,但缺点是用户或应用程序必须刷新并重试失败的更新。如何解决这个问题,使用户或应用程序不会陷入此类失败错误?

public class User {

 @Id
 private Long id;

 @Version
 private Long version;


}

最佳答案

您可以use使用版本的乐观锁定或使用数据库锁定的悲观锁定。

乐观意味着您希望并发更改永远不会发生,如果发生的话,其中一个用户将获胜,而第二个(或第三个等)则必须从数据库更新其实体并再次执行更改。由于它在数据库层不使用任何额外的锁定,因此它只是为您的系统/数据库提供了巨大的吞吐量。

另一方面,您可以使用悲观锁定,一旦用户开始编辑实体,就会锁定实体。当底层事务提交/回滚时,锁会同时释放。没有人可以从数据库中获取实体,因此大多数用户需要等待另一个用户提交事务。明显的优点是不再出现此类错误,缺点是吞吐量较低。

关于java - 如何解决hibernate中乐观锁(Versioning)的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18396261/

相关文章:

java - 在java中使用scala列表

java - 带有 Java 的 Wss4jSecurityInterceptor 的 SOAP WS-Addressing 属性

java - 在 Android 中打开文件

java - hibernate jpa 应用程序每次我想运行它时都会挂起

java - 以编程方式创建架构时出现未知数据库异常?

java.lang.NumberFormatException : For input string: "" while saving to database 异常

java - 替换 AuthenticationException.getAuthentication();

java - 设置嵌套 JSON 响应的格式

java - 我面临 "java.lang.IllegalArgumentException: Can not set int field com.example.demo.model.Customer.customerId to java.util.LinkedHashMap"

java - 如何使用 Hibernate 插入引用 mysql DB 中其他字段的外键?