但是我仍然不确定它是如何工作的?
假设一个实体
MyEntity具有带注释的
version属性:
@Entitypublic class MyEntity implements Serializable { @Id @GeneratedValue private Long id; private String name; @Version private Long version; //...}更新时,带有注释的字段
@Version将增加并添加到
WHERe子句中,如下所示:
UPDATE MYENTITY SET ..., VERSION = VERSION + 1 WHERe ((ID = ?) AND (VERSION = ?))
如果
WHERe子句未能匹配记录(因为同一实体已经被另一个线程更新),则持久性提供程序将抛出
OptimisticLockException。
这是否意味着我们应该将我们的version字段声明为final
不可以,但是您可以考虑使二传手受到保护,因为您不应该称呼它。



