比较javers中子类和父类的对象

时间:2018-05-25 10:30:02

标签: java javers

我有两个班级:

class A {
  @org.springframework.data.annotation.Id
  String id;      
  String field;
}
class B extends A {
  @DiffIgnore
  String someOtherField;
}

我想比较A类的实例和B类的实例。 两个实例都具有相同的id

请告诉Javers无论如何都可以。

我已经在互联网上做过研究,尝试使用相同或不同的@TypeName,尝试@ValueObject@Entity - 没有任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要使用@TypeName并为这两个类指定相同的名称。 然后JaVers比较对象,但仅比较超类型中声明的属性。

我写了测试来展示它(Groovy):

class CaseWithInheritance extends Specification{
    @TypeName("A")
    class A {
        @Id
        String id
        String field
    }
    @TypeName("A")
    class B extends A {
        @DiffIgnore
        String someOtherField
    }

    def "should compare objects' intersection"(){
      given:
      def a = new A(id:1, field:"aa")
      def b = new B(id:1, field:"bb", someOtherField:"b")
      def javers = JaversBuilder.javers().build()

      when:
      def diff = javers.compare(a, b)

      then:
      diff.changes.size() == 1
      println diff.prettyPrint()
    }
}

输出:

Diff:
* changes on A/1 :
  - 'field' changed from 'aa' to 'bb'