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

Compare objects of child and parent classes in javers

我有两个 classes:

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

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

请告诉 Javers 是否可行。

我已经在 Internet 上进行了研究,尝试使用相同或不同的 @TypeName,尝试使用 @ValueObject@Entity - 没有任何帮助。

您需要使用 @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'