在 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'
我有两个 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'