我们正在使用 spring-data-neo4j release 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()
不幸的是,关系没有更新,所有属性都保持不变......
我们知道如何在 repo 中使用带注释的密码查询来做到这一点,但是必须有一种“抽象”的方式?!
非常感谢!
问候
编辑:如果我从 Set 中删除关系,然后在节点上执行 save(),则关系被删除。只有更新不起作用!或者这就是意图?