首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring数据Neo4j 4.0:创建重复的节点,应该创建关系

Spring数据Neo4j 4.0:创建重复的节点,应该创建关系
EN

Stack Overflow用户
提问于 2015-10-02 06:43:27
回答 1查看 453关注 0票数 2

摘要:SDN4,我持久化了10个对象,其中一半的内容只有链接到的id不同。链接ID被设置为@Transient。但是,两个对象的内容是相同的,而不是一个具有两个链接的对象。我怎样才能避免这种行为?

Detail:我们定义了两个域对象和通过定义的信息源,它们看起来如下:

域对象A CSV:

代码语言:javascript
运行
复制
key,name
1,test1
3,test3

POJO A:

代码语言:javascript
运行
复制
@Transient
private int key;    
private String name;

@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
private Set<B> bObject = new HashSet<>();

public void setName(String name) {
    this.name = name;
}

@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
public void hasCertification(B b) {
    bObject.add(b);
    b.getA().add(this);
}

域对象B:

代码语言:javascript
运行
复制
foreignKey,name,value
1,ISO9001,TRUE
1,ISO14001,TRUE
3,ISO9001,TRUE
3,ISO14001,TRUE

POJO B:

代码语言:javascript
运行
复制
@Transient
private int foreignKey;
private String name;
private String value;

@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
private Set<A> a = new HashSet<>();

public void setName(String name) {
    this.name = name;
}

public void setValue(String value) {
    this.value = value;
}

@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
public Set<A> getA() {
    return a;
}

这些CSV文件在各自的POJO (A和B)中被解析并加载到SDN4中。

现在,我们遍历这些对象并添加关系:

代码语言:javascript
运行
复制
private void aHasCertification(
        Optional<List<B>> b,
        Optional<List<A>> a) {
    for (A aObj : a()) {
        for (B bObj : b()) {
            if(bObj.getForeignKey() == aObj.getKey()) {
                aObj.hasCertification(bObj);
            }
        }
    }
}

然后,根存储库repositoryA用于保存加载的对象。repositoryA.save(domainObjectA);

现在,当我查询数据库时,match n return n;

对于每个A对象,将有两个ISO9001和两个ISO14001对象。而不是我所期望的那样,每一个都有两个链接到A:1A:3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-02 16:50:23

如果我对你的理解正确,而不是

你期待着

OGM无法知道具有相同“名称”的B的两个实例是同一个节点。您需要做的是按属性加载B节点,如果它存在,使用它来关联A,否则创建它。我怀疑您需要进一步处理CSV数据,而不是用几乎1:1的映射到CSV行来建模对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32901807

复制
相关文章

相似问题

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