当前位置: 首页 > 知识库问答 >
问题:

使用Javers比较地图

聂涛
2023-03-14

我想检测到鲍勃在以下情况下将城市从伦敦改为巴黎:

public void compareMaps() {
    Javers javers = JaversBuilder.javers().build();
    Map<Integer, Person> a = new HashMap<>();
    Map<Integer, Person> b = new HashMap<>();
    a.put(Integer.valueOf(1), new Person(1, "Bob", "London"));
    b.put(Integer.valueOf(1), new Person(1, "Bob", "London"));
    Diff diff = javers.compare(a, b);
    assertThat(diff.getChanges()).hasSize(0);
    b.get(Integer.valueOf(1)).setCity("Paris");
    diff = javers.compare(a, b);
    assertThat(diff.getChanges()).hasSize(1);
}

static public class Person {
    @Id
    int id;
    String name;
    String city;
    @Override
    public boolean equals(Object obj) {...}
    @Override
    public int hashCode() {...}
}

共有1个答案

廉雅惠
2023-03-14

实际上,你不能比较顶级地图。作为一种变通方法,您可以将这些映射放在某个值对象中,这要归功于JaVers将能够确定键和值的类型。

对于顶级集合,有一个特殊的方法(javers.compareCollections()),但还没有用于映射的方法。

在JaVers的进一步版本中,folowing方法可以实现 Diff compareMaps(map oldVersion,map currentVersion,class keyClass,class valueClass);

 类似资料:
  • 我的要求是,为了应用程序审计的目的,我希望比较两个BO对象,并返回一个obj diff作为Json字符串将详细信息存储到审计表中。在我的例子中,我实现了一个hibernate拦截器,它将监视BO操作。这部分工作得很好。但是当试图将BO对象与Javers进行比较时,会出现一个名为 下面是我的示例hibernate结果类 注意:BO对象在运行时可以包含值。

  • 嗨,我是贾维斯的新手。 我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较。 我的实体:- 包装com.devyansh.entity; 进口java.util.清单; 导入组织。贾维斯。果心元模型。注释。实体 下面我注册了新的比较器:- 我的比较器实现:- 问题领域:- 每当我尝试使用以下行进行比较时:- Diff Diff=标枪。比较(new Ent(“aaa”,new

  • 我有一个关于列表比较器的问题。我有一个带有表格的网页应用程序。我可以在这个表格中编辑数据,也可以删除行。当我编辑数据时,标准比较器工作正常,但当我删除行时,我有问题。这个问题很常见(我想),当我删除一行时,javers比较旧列表和现在的列表时,看起来是这样的:旧列表有两个对象,现在列表有一个对象(我删除了第一个),现在javers不知道哪个对象被删除了,他比较旧列表中的第一个对象和新列表中的第二个

  • 我有两个列表,数据相同,但顺序不同。 结果:

  • 我有一个Java8/Maven/Spring Boot项目。我使用Javers来审核应用程序中的更改,然而,我创建了一个自定义注释,它放在类中的字段上方,如果更改,我希望对其进行审核。下面是一个示例类:

  • 问题内容: 我有两个地图声明为。在这里可以是另一个(依此类推)。我想检查两个地图是否完全相同,但不知道其深度。除了使用递归,我还可以比较每个地图上被调用的输出吗?还是有比较简单的方法比较地图? 问题答案: 快速回答 您应该使用该方法,因为已经实现了该方法以执行所需的比较。本身就像使用迭代器一样,但这是一种效率较低的方法。另外,正如@Teepeemm所指出的那样,它受元素顺序的影响(基本上是迭代器的