java - JPA 乐观锁定与同步 Java 方法

标签 java database hibernate jpa transactions

使用 JPA 乐观锁定,我们可以通过 @Version 字段控制数据库表是否同时被另一个事务更新,从而允许在数据库中存储可靠的数据。

如果一个 Java 应用程序只有一个 CRUD 服务负责数据库中的特定实体,我们可以同步它的方法并管理信息在数据库中存储的顺序。

所以我的问题是,这些场景之间有什么区别?是否存在性能优势或可遵循的最佳实践?

最佳答案

方法同步的缺点:

  1. 您将为属于该实体类的所有实体实例序列化更新。两个并发线程将无法更新两个不同的实例。
  2. 它不适用于集群。
  3. 维护比较困难。如果对实体的操作变得更加复杂,因此可以在多个服务中更新实体,或者您需要在同一事务中更新不同此类实体类的实例,则必须将它们全部同步。
  4. 第 3 点)增加了出现死锁的机会。
  5. 您必须确保执行整个事务时持有必要的同步锁,否则,如果您在提交事务之前释放锁,并发事务可能会获得锁并继续更改相同的数据。
  6. 根据用例,即使线程/事务不是并发的,如果没有版本控制,您也不知道数据是否同时发生了变化(例如,您获取数据,根据数据在客户端上修改某些内容,然后其他人更改该数据,然后您保存您的修改)。

关于java - JPA 乐观锁定与同步 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964692/

相关文章:

python - sqlalchemy:对象取消引用错误

python - 在进程sqlite之间共享内存数据库

php - WordPress自定义登录数据库错误

java - JPA 无法反序列化 Java 8 LocalDateTime

java - Hibernate为不同的表提供不同的缓存?

java - 变量未在 for 循环中初始化

java - BufferedReader.nextLine() 不会前进到下一行,所以我陷入了循环

java - Hibernate 通过查询进行多对多数据检索

java - 震动 : Mathematical conditional spec

java - Java 中的 parallelStream 在哪些应用领域有用?