JPA乐观锁定与同步Java方法 [英] JPA optimistic locking vs synchronized Java method

查看:247
本文介绍了JPA乐观锁定与同步Java方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Using JPA optimistic locking we can control via a @Version field if a database table has been updated by another transaction at the same time, allowing to have reliable data stored in database.

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

If a Java application has only one CRUD service in charge of an specific entity in database, we could synchronize its methods and manage the order the information is stored in database too.

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

So my question is, what's the difference between those scenarios? Does exist any advantage of performance or even best practices to follow?

推荐答案

方法同步的缺点:

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

这篇关于JPA乐观锁定与同步Java方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆