我们的情景:
问题:乐观锁定(并发修改检测)不起作用,因为版本属性的修改方式使得无法检测到并发修改。
例如,实体在首次从DB加载时具有版本100。当Alice在FE上修改实体数据(例如,30分钟)时,实体被一些自动过程修改五次,其版本增加到105.当Alice完成更改时,应用程序发送修改后的数据对BE。 BE从DB加载相应的实体(现在在版本105中),并使用来自FE的值(包括版本属性)更新其属性。因此,托管实体已加载版本105,但该版本后来明确更改为100.现在,BE调用EntityManager.merge(…)
将数据保存到数据库。调用JPA flush后,版本字段将增加,数据将保存到DB。
问题在于,在刷新期间,版本不会增加到101(正如我预期的那样),而是增加到106.
这是正确的行为吗?我怎样才能让它以预期的方式运作?
我已经使用Hibernate 5.1.10和5.2.17进行了测试。