首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javers检索添加到列表中的对象

Javers检索添加到列表中的对象
EN

Stack Overflow用户
提问于 2019-02-14 22:38:05
回答 1查看 612关注 0票数 0

在javers中,可以检索列表(或任何容器)中添加的对象吗?

我要的不是GlobalId,而是真正的对象实例。

getAddedValues似乎返回一个GlobalId,而不是真正的对象。

注意:我不会提前知道我要比较的对象类型。这是一个示例对象。

代码语言:javascript
复制
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;
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2019-02-16 05:58:24

我用其他的changeType找到了一个解决方案。我能够用NewObject和ObjectRemoved的getChangesByType构建一个地图。在这些更改中,该对象出现在受影响的对象中。

如下所示:

代码语言:javascript
复制
     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检索对象

代码语言:javascript
复制
addedAndRemovedObjects.get(containerChange.getAddedValues().get(1).toString());

注1:我可能会将toString键更改为其他键,但它对我的测试示例有效。GlobalId和IdentityId是不相等的,但toString是相等的。

注2: getAddedValues().get(1)仅用于示例。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54692927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档