使用JaVers审核复杂的对象更改

时间:2020-02-23 12:38:04

标签: java kotlin javers

我阻止使用JaVers审核复杂对象的更改。 我需要跟踪SiteDto对象,它是复杂的对象。我的实现设计如下: 我有一个名为site的实体类:

@Entity
Site 
@Id  Id: Int(PK)  
user: String  
reason: String  
siteDto: SiteDto    

我有两项服务:

Service1:此服务将SiteD发送到service2。我们从service2获得的结构是:

@ValueObject
SiteDto  
name: String  
code: String  
address: String  
nodes: List<NodeDto>

@ValueObject
NodeDto:  
name: String  
code: String  
modules: Set<ModuleDto>  
devices: Set<DeviceDto>

@ValueObject
ModuleDto:   
name: String    
code: String   
configMap: Map<String, String>

@ValueObject
DeviceDto:   
name: String   
code: String    
ports: Set<PortDto>

@ValueObject
PortDto:   
name: String   
code: String   
configMap: Map<String, String>

Service2:-此服务执行以下操作以跟踪差异。

  1. 从Service1接收SiteDto

  2. 将SiteD转换为具有Set到List的嵌套对象,我正在转换,因为Set确实显示了不提供更改内容的哈希值。结构如下。

@ValueObject
SiteDto  
name: String  
code: String  
address: String  
nodes: List<NodeDto>

@ValueObject
NodeDto:  
name: String  
code: String  
modules: List<ModuleDto>  
devices: List<DeviceDto>

@ValueObject
ModuleDto:   
name: String    
code: String   
configMap: Map<String, String>

@ValueObject
DeviceDto:   
name: String   
code: String    
ports: List<PortDto>

@ValueObject
PortDto:   
name: String   
code: String   
configMap: Map<String, String>
  1. 按字母数字顺序排列嵌套的对象列表,并将SiteDto发送到JaVers以获取轨迹差异。
  2. JaVers第一次不会给出结果,因为它将是INITIAL类型的。当我使用findChanges()查询时它不会跟踪差异
  3. 当我更新嵌套对象列表时,
  4. JaVers会跟踪嵌套对象的变化。例如:我更新列表中的ModuleDto或DeviceDto或PortDto。
  5. 当我在嵌套列表中添加新的ModuleDto或DeviceDto或PortDto时,JaVers没有给出正确的差异,因为我执行字母数字顺序。
  6. 当我从嵌套列表中删除旧的ModuleDto,DeviceDto,PortDto时,JaVers没有给出正确的差异,因为当我执行字母数字顺序时索引会发生变化。

我被下列问题所困扰。您能提出解决这些问题的方法吗?

  1. 当我在嵌套列表中添加新的ModuleDto或DeviceDto或PortDto时,JaVers没有给出正确的差异,因为我执行字母数字顺序。

  2. 当我从嵌套列表中删除旧的ModuleDto,DeviceDto,PortDto时,JaVers没有给出正确的差异,因为当我执行字母数字顺序时索引会更改。

0 个答案:

没有答案