如何将自己做的网站变成中文,wordpress做教育网站,区域销售网站什么做,杭州seo网站排名介绍当涉及到企业应用程序时#xff0c;正确地管理对数据库的并发访问是至关重要的。为此#xff0c;我们可以使用Java Persistence API提供的乐观锁定机制。它导致在同一时间对同一数据进行多次更新不会相互干扰。为了使用OptimisticLocking#xff0c;我们需要一个实体(En…介绍当涉及到企业应用程序时正确地管理对数据库的并发访问是至关重要的。为此我们可以使用Java Persistence API提供的乐观锁定机制。它导致在同一时间对同一数据进行多次更新不会相互干扰。为了使用OptimisticLocking我们需要一个实体(Entity)其中包含一个带有Version注释的属性。在使用它时每个读取数据的事务都持有version属性的值。在事务想要进行更新之前它将再次检查version属性。如果值在此期间发生了更改则抛出ObjectOptimisticLockingFailureException。否则事务提交update并递增version的值。这种机制适用于读操作比更新或删除操作多得多的应用程序。新建一个UserEntity.javaEntityTable(name user)DataOptimisticLockingpublic class User {IdGeneratedValue(strategy GenerationType.SEQUENCE)private Integer id;Column(name username, unique true, nullable true, length 50)private String username;private String password;Versionprivate Integer version;PrePersistpublic void prePersist() {version 0;}}spring data jpa在上一篇文章已经做过一些讲解了【快学springboot】7.使用Spring Boot Jpa。感兴趣的朋友可以看看。这里定义了一个version字段使用了Version注解标识。PrePersist这个注解表示在新增数据之前执行。新建UserRepo接口public interface UserRepo extends PagingAndSortingRepository, JpaSpecificationExecutor {}新建一个UserTest类继承SpringbootApplicationTestspublic class UserTest extends SpringbootApplicationTests {}SpringbootApplicationTests这个类是使用Spring initialize新建项目的时候自动生成的用来做单元测试的类。在UserTest上注入UserRepo并且写一个新增user的单测。执行之后查看数据库。该记录已经被创建出来了。测试update该记录执行后查看数据库可以看到version字段自增了1。测试JPA乐观锁新建一个方法如下这里查询了两次id为1的记录然后分别更新了这条记录。根据前面的描述这里会抛出一个ObjectOptimisticLockingFailureException异常。启动测试结果如下这是符合预期的。看下数据库的version在这种情况下我们的预期结果是version变为2。通过数据库的值查看测试都是符合预期的。去掉User的OptimisticLocking注解我们把User实体的OptimisticLocking注解去掉然后再次执行上面的方法。这一次程序顺利执行了然后查看下数据库的记录预期应该是version会变为3然后username变为happyjava-new2。通过结果来看这是符合预期的。总结spring data jpa通过OptimisticLocking实现了乐观锁该乐观锁不是通过数据库自身去实现的它是通过version字段(需要Version注解标识)去实现的。如果update的数据时候发现数据库的version大于等于当前的version则会抛出ObjectOptimisticLockingFailureException错误信息是Row was updated or deleted by another transaction