问题标签 [document-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JaVers 的 MongoDB 文档版本更新问题
我正在使用 Javers 进行带有 springboot 的 mongoDB 文档版本控制。它提供了版本控制的基本功能,例如单独的历史集合称为jv_snapshots
、更改的字段列表Entity
或ValueObject
版本的模型。但我发现了一个与 valueObjects 相关的问题,但与实体无关。如您所知,entity 和 valueObjects 之间的区别在于标识实体的唯一 id,而 valueObjects 没有这样的 Id 来标识它们的版本。当我在我的用例中观察到这个问题时,请参考以下示例。
让我们采用以下 Entity 和 valueObject 模型进行版本控制。
发票.java
项目模型.java
ER图(简化)
对于初始发票文档创建,javers 在实际发票文档中创建相关项目作为具有INITIAL版本类型和 1 作为版本的单独历史文档。问题是这些项目文档中的每一个都带有标有其数组索引位置的globalId_key 。此globalId_key 唯一地标识每个项目文档。因此,如果发票将发生UPDATE ,则其中的项目将根据数组 index与INITIAL项目历史文档进行比较。
请参考以下示例。
假设在UPDATEuserName
版本中仅更改了与发票相关的所有项目,所有项目都被打乱,项目没有任何变化,如下图所示。
在这种情况下,javers 将根据数组索引为具有globalId_keys的项目创建 3 个单独的历史文档,如下所示。
invoice/123#items/0
invoice/123#items/1
invoice/123#items/2
因此,在更新阶段,由于基于数组索引的比较,javers 将再次为项目创建 3 个单独的历史文档。但这不应该发生,因为项目不包含与初始版本相比的任何更改,除了数组内部的改组。
有没有可能避免javers的这个问题,或者有没有其他选择?