我有两个班级:
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
- 没有任何帮助。
答案 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'