Javers 将添加的对象检索到列表中
Javers retrieve the added object to a list
在 javers 中,是否可以检索列表(或任何容器)的添加对象?
我不想要 GlobalId,而是真正的对象实例。
getAddedValues 似乎 return 一个 GlobalId 而不是真实的对象。
注意:我不会事先知道要比较的对象类型。这是一个示例对象。
MyTestObject obj1 = //Initialise it
MyTestObject obj2 = //Initialise it
Diff diff = javers.compare(obj1, obj2);
List<ContainerChange> containerChanges = diff.getChangesByType(ContainerChange.class);
for (ContainerChange containerChange : containerChanges) {
for (Object addedValue : containerChange.getAddedValues()) {
containerChange.getAffectedObject() //Returns the affected object
addedValue //Returns an GlobalId but I want the real object added. (in this case the subObject added) Like the getAffectedObject() but with the other object.
}
}
@TypeName("MyTestObject")
private static class MyTestObject {
@Id
private int id;
private String value;
private List<SubObject> subObjects;
private MyTestObject() {
}
private MyTestObject(int id, String value, List<SubObject> subObjects) {
this.id = id;
this.value = value;
this.subObjects = subObjects;
}
}
@TypeName("SubObject")
private static class SubObject {
@Id
private int id;
private String value;
private SubObject() {
}
private SubObject(int id, String value) {
this.id = id;
this.value = value;
}
}
我找到了一些其他 changeType 的解决方案。我能够使用 NewObject 和 ObjectRemoved 的 getChangesByType 构建地图。在这些更改中,对象存在于受影响的对象中。
像这样:
map = Stream.of(NewObject.class, ObjectRemoved.class)
.flatMap(type -> diff.getChangesByType(type).stream())
.collect(
Collectors.toMap(change -> change.getAffectedGlobalId().toString(),
change -> change.getAffectedObject().get()));
并检索具有 addedValue 的对象
addedAndRemovedObjects.get(containerChange.getAddedValues().get(1).toString());
注意 1:我可能会更改 toString 键以换取其他内容,但它对我的测试示例有效。 GlobalId 和 IdentityId 不相等,但 toString 是。
注2:getAddedValues().get(1)仅为示例。
在 javers 中,是否可以检索列表(或任何容器)的添加对象?
我不想要 GlobalId,而是真正的对象实例。
getAddedValues 似乎 return 一个 GlobalId 而不是真实的对象。
注意:我不会事先知道要比较的对象类型。这是一个示例对象。
MyTestObject obj1 = //Initialise it
MyTestObject obj2 = //Initialise it
Diff diff = javers.compare(obj1, obj2);
List<ContainerChange> containerChanges = diff.getChangesByType(ContainerChange.class);
for (ContainerChange containerChange : containerChanges) {
for (Object addedValue : containerChange.getAddedValues()) {
containerChange.getAffectedObject() //Returns the affected object
addedValue //Returns an GlobalId but I want the real object added. (in this case the subObject added) Like the getAffectedObject() but with the other object.
}
}
@TypeName("MyTestObject")
private static class MyTestObject {
@Id
private int id;
private String value;
private List<SubObject> subObjects;
private MyTestObject() {
}
private MyTestObject(int id, String value, List<SubObject> subObjects) {
this.id = id;
this.value = value;
this.subObjects = subObjects;
}
}
@TypeName("SubObject")
private static class SubObject {
@Id
private int id;
private String value;
private SubObject() {
}
private SubObject(int id, String value) {
this.id = id;
this.value = value;
}
}
我找到了一些其他 changeType 的解决方案。我能够使用 NewObject 和 ObjectRemoved 的 getChangesByType 构建地图。在这些更改中,对象存在于受影响的对象中。
像这样:
map = Stream.of(NewObject.class, ObjectRemoved.class)
.flatMap(type -> diff.getChangesByType(type).stream())
.collect(
Collectors.toMap(change -> change.getAffectedGlobalId().toString(),
change -> change.getAffectedObject().get()));
并检索具有 addedValue 的对象
addedAndRemovedObjects.get(containerChange.getAddedValues().get(1).toString());
注意 1:我可能会更改 toString 键以换取其他内容,但它对我的测试示例有效。 GlobalId 和 IdentityId 不相等,但 toString 是。
注2:getAddedValues().get(1)仅为示例。