gpt4 book ai didi

java - SDN 保存节点并更新附加关系的属性

转载 作者:行者123 更新时间:2023-12-01 14:14:33 26 4
gpt4 key购买 nike

我们正在使用 spring-data-neo4j 版本 2.2.2.Release 和 Neo4j 1.9

使用 GraphRepository 保存和更新节点(属性)可以正常工作

我们最简单的示例如下所示:

public interface LastReadMediaRepository extends GraphRepository<Neo4jLastReadMedia> {}

我们还设置了一些连接到节点的关系,节点类如下所示

@NodeEntity
public class Neo4jLastReadMedia {

@GraphId
Long id;

@JsonIgnore
@Fetch @RelatedToVia(type = "read", direction = Direction.OUTGOING)
Set<LastReadMediaToLicense> licenseReferences;

public Neo4jLastReadMedia() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public void read(final Neo4jLicense license, final Long lastAccess, final float progress, final Long chapterId) {
licenseReferences.add(new LastReadMediaToLicense(this, license, lastAccess, progress, chapterId));
}

public Set<LastReadMediaToLicense> getLicenseReferences() {
return licenseReferences;
}

@Override
public String toString() {
return "Neo4jLastReadMedia [id=" + id + "]";
}
}

现在,我们使用存储库的 save() 保存一个节点方法。至少在第一次保存时,关系也会被保存。

稍后,当我们想要更改已存在的关系(更新关系)(例如lastAccess)的属性时,我们从数据库中检索节点,操作其关系集,此处Set<LastReadMediaToLicense> licenseReferences;然后,尝试使用 save() 保存该节点

不幸的是,关系没有更新并且所有属性保持不变...

我们知道如何在存储库中使用带注释的密码查询来做到这一点,但必须有一种“抽象”的方式?!

非常感谢!

问候

编辑:如果我从集合中删除关系,然后在节点上执行 save(),则该关系将被删除。只更新不行!或者这就是意图?

最佳答案

安迪,

SDN 仅检查集合的修改,即添加和删除,它不会检查每个关系的更改,这会导致成本更高。

通常可以通过存储库或模板保存关系来解决这个问题,而不是将其添加到集合中然后保存节点。这也更快。

关于java - SDN 保存节点并更新附加关系的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232822/

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