Сравните объекты дочерних и родительских классов в javers - PullRequest
0 голосов
/ 25 мая 2018

У меня есть два класса:

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 голосов
/ 31 мая 2018

Вам нужно использовать @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'
...