@Version 注解作用及用法

320 阅读1分钟

@Version 是jpa中的一个注解,作用是通过注解实体类的某一个字段,用来实现乐观锁。每次对表数据进行更新操作时,jpa框架会对该字段进行比较,如果相同则会进行更新操作;否则更新失败并抛出异常javax.persistence.OptimisticLockException。

出现场景:并发情况下,a、b两个任务同时对表中的同一个数据操作,这时a、b都拿到表数据进行操作,a先提交操作,jpa则比较@Version注解的字段(这里称版本号)是否一致,一致后将更新数据,并且修改版本号的值;此时b的数据已经是过时的了(a已经抢先一步更新),如果系统不做处理就会出现数据丢失现象,于是b提交更新请求的时候,jpa框架会比较b任务的版本号和现表中版本号是否一致,不一致则更新失败,并且抛出异常。

用法:根据系统选择合适的字段,添加 @Version 注解即可。 image.png