JPA / Hibernate
Optmistic锁定的工作方式是使用某个字段来存储上次修改的版本(例如,时间戳,long),然后将会话中实体的版本与数据库中的实体进行比较,以查看是否可以保存更改。
为此,您需要在实体中使用@Version注释字段。
参见以下示例。
http://www.javapregeeks.com/2012/11/jpahibernate-version-based-optimistic-
concurrency-control.html
为了使它在Web应用程序中起作用,需要进一步考虑,但是,好像两个人加载了相同的实体进行编辑,然后过一会儿提交他们的编辑,他们很可能都会成功,除非您使用某种长时间运行的会话,否则该实体正在编辑的文件将从表单提交的数据库中重新加载,填充和保存。
例如,修订版1中的实体
- 用户1加载以进行编辑:版本为1
- 用户2进行编辑加载:修订为1
- 用户2提交表单:已加载实体(在r1处),绑定了字段,已保存实体:修订版为2。
- 用户1提交表单:已加载实体(在r2处),绑定了字段,已保存实体:修订版为3。
因此,要使此工作正常进行,您可以看一下提交一个隐藏字段的表单,该表单在存储实体修订版本时将其存储。因此,在上面的最后一步,当用户1提交时,修订字段将被设置回1,并且更新将失败,因为数据库中的记录在r2处。



