【发布时间】:2011-02-04 01:54:54
【问题描述】:
@Version 注解在 JPA 中是如何工作的?
我找到了各种答案,摘录如下:
JPA 使用实体中的版本字段来检测对同一数据存储记录的并发修改。当 JPA 运行时检测到同时修改同一记录的尝试时,它会向最后尝试提交的事务抛出异常。
但我仍然不确定它是如何工作的。
还有以下几行:
您应该考虑版本字段是不可变的。更改字段值会产生未定义的结果。
这是否意味着我们应该将我们的版本字段声明为final?
【问题讨论】:
-
它所做的只是在每个更新查询中检查/更新版本:
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]。如果有人更新了记录,old.version将不再匹配数据库中的记录,并且 where 子句将阻止更新发生。 'rows updated' 将是0,JPA 可以检测到它以得出并发修改发生的结论。
标签: java jpa jpa-annotations