使用 JPA 乐观锁定,我们可以通过 @Version 字段控制数据库表是否同时被另一个事务更新,从而允许在数据库中存储可靠的数据。
如果一个 Java 应用程序只有一个 CRUD 服务负责数据库中的特定实体,我们可以同步它的方法并管理信息在数据库中存储的顺序。
所以我的问题是,这些场景之间有什么区别?是否存在性能优势或可遵循的最佳实践?
最佳答案
方法同步的缺点:
- 您将为属于该实体类的所有实体实例序列化更新。两个并发线程将无法更新两个不同的实例。
- 它不适用于集群。
- 维护比较困难。如果对实体的操作变得更加复杂,因此可以在多个服务中更新实体,或者您需要在同一事务中更新不同此类实体类的实例,则必须将它们全部同步。
- 第 3 点)增加了出现死锁的机会。
- 您必须确保执行整个事务时持有必要的同步锁,否则,如果您在提交事务之前释放锁,并发事务可能会获得锁并继续更改相同的数据。
- 根据用例,即使线程/事务不是并发的,如果没有版本控制,您也不知道数据是否同时发生了变化(例如,您获取数据,根据数据在客户端上修改某些内容,然后其他人更改该数据,然后您保存您的修改)。
关于java - JPA 乐观锁定与同步 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964692/