gpt4 book ai didi

java - Spring Data Neo4j 4.0 : Duplicate nodes created, 应该改为创建关系

转载 作者:行者123 更新时间:2023-11-30 08:46:21 25 4
gpt4 key购买 nike

总结:使用 SDN4,我保留了 10 个对象,其中一半具有相同的内容,只是它们链接到的 ID 不同。链接 ID 设置为 @Transient。不过,创建的两个对象具有相同的内容,而不是一个具有两个指向它的链接的对象。我怎样才能避免这种行为?

详细信息:我们通过 CSV 定义了两个域对象和信息源,它们如下所示:

域对象 A CSV:

key,name
1,test1
3,test3

POJO A:

@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:

foreignKey,name,value
1,ISO9001,TRUE
1,ISO14001,TRUE
3,ISO9001,TRUE
3,ISO14001,TRUE

POJO B:

@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 中。

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

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);

现在当我查询数据库时; 匹配 n 返回 n;

对于每个 A 对象,将有两个 ISO9001 和两个 ISO14001 对象。与我期望的不同,每个链接都有两个指向 A:1A:3 的链接。

最佳答案

如果我没理解错的话,不是

enter image description here

你期待

enter image description here

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

关于java - Spring Data Neo4j 4.0 : Duplicate nodes created, 应该改为创建关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32901807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com