关于jpa的@Version标记,看文档时愣没看懂。在这里摘抄个例子。
例:假设当前数据的版本为1,余额为100
a. 操作员A此时将其读出(version=1),并从其账户余额中扣除$50(100-50)。
b. 在操作员A操作的过程中,操作员B也要读入此用户信息(version=1),并从其账户余额中扣除$20(100-20)。
c. 操作员A完成修改工作,将数据版本号加1(version=2),连同余额$50一并提交数据库更新,此时由于提交数据版本大于数据库记录的当前版本,数据被更新,数据库记录版本更新为2。
例:假设当前数据的版本为1,余额为100
a. 操作员A此时将其读出(version=1),并从其账户余额中扣除$50(100-50)。
b. 在操作员A操作的过程中,操作员B也要读入此用户信息(version=1),并从其账户余额中扣除$20(100-20)。
c. 操作员A完成修改工作,将数据版本号加1(version=2),连同余额$50一并提交数据库更新,此时由于提交数据版本大于数据库记录的当前版本,数据被更新,数据库记录版本更新为2。
d. 操作员B完成操作,也将版本号加1(version=2)试图向数据库提交数据$80,但此时比对数据库记录版本时发现,操作员B提交的数据版本号为2,数据库记录当前版本也为2,不满足“提交版本必须大于记录当前版本才能执行更新”的乐观锁策略,因此,操作员B的操作被驳回。
转自:http://www.blogjava.net/sway/archive/2008/10/10/233569.html