首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javers按顺序比较列表

Javers按顺序比较列表
EN

Stack Overflow用户
提问于 2019-03-07 04:11:19
回答 1查看 491关注 0票数 1

我有两个类似的java类:

代码语言:javascript
复制
public class FooA {
  private List<FooB> fooB;
}

public class FooB {
  private Integer id;
  private String name;
  private double num;
}

我想比较一下FooA,它会告诉我list对象中的哪些字段发生了变化。但是当我这样做的时候:

代码语言:javascript
复制
FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
FooA new = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));

Javers javers = JaversBuilder.javers()
          .withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
          .build();

javers.compare(old, new);

它给了我这样的不同:

代码语言:javascript
复制
Diff:
* new object: com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32
* object removed: com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620
* changes on com.FooA/ :
  - 'fooB' collection changes :
    . 'com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620' removed
    . 'com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32' added

我甚至试着在FooB上添加一个Id,就像我在很多帖子中看到的那样。所以现在我的foob看起来像这样:

代码语言:javascript
复制
public class FooB {
  @Id
  private Integer id;
  private String name;
  private double num;
}

但现在,当我比较时,我得到了这个:

代码语言:javascript
复制
Diff:
* changes on com.FooB/1 :
  - 'name' changed from 'old' to 'new'

它注册为值更改,而不是集合更改。我希望diff读起来是这样的:

代码语言:javascript
复制
Diff:
* changes on com.FooA/#fooB/1 :
  - 'fooB' collection changes :
    . 'name' changed from 'old' to 'new'

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-03-07 06:18:50

使用Javers版本5.2.4

代码语言:javascript
复制
public class FooA {
    private List<FooB> fooB;

    public FooA(List<FooB> fooB) {
        this.fooB = fooB;
    }
}

public class FooB {
    private Integer id;
    private String name;
    private double num;

    public FooB(Integer id, String name, double num) {
        this.id = id;
        this.name = name;
        this.num = num;
    }
}

void test() {
    FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
    FooA new1 = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));

    Javers javers = JaversBuilder.javers()
            .withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
            .build();

    System.out.println(
            javers.compare(old, new1)
    );
}

方法test返回:

代码语言:javascript
复制
Diff:
* changes on pl.javers.JaversTest$FooA/ :
  - 'fooB/0.name' changed from 'old' to 'new'

它几乎和你想要的一样。

FooA/fooB/0.name -> fooA具有数组fooB,并且first (索引0)名称属性已更改

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55031433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档