本文简单的演示了在 Spring Boot 中使用乐观锁(Optimistic Lock)情况。
启动乐观锁
在 Spring Boot Data JPA 中,默认是启动了乐观锁机制的,我们需要做的就是在实体中定义这把”锁”。最简单的定义说的方式是在实体类中添加一个(长)整型或是时间戳的属性,并用@version注解它。
如下面的代码:
1 |
|
对应的Repository不用修改,保存默认的写法即可。
验证
但执行一个新增操作时:
1 | accountRepository.save(account); |
可以看到后台会生成如下的SQL语句:
1 | insert into account (balance, mobile, nick_name, version, id) values (?, ?, ?, ?, ?) |
查询数据库,可以得知应用为 version 自动生成了值: 0。
在别的业务中改变 Account 对象,例如:
1 | Optional<Account> opAccount = accountRepository.findById(accountId); |
可以看到后台会生成如下的SQL语句:
1 | select account0_.id as id1_0_0_, account0_.balance as balance2_0_0_, account0_.mobile as mobile3_0_0_, account0_.nick_name as nick_nam4_0_0_, account0_.version as version5_0_0_ from account account0_ where account0_.id=? |
可以看到,系统使用字段 version 进行了版本检查。