我们正在使用spring-data-neo4j版本2.2.2。发布和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,{{1}然后,尝试使用Set<LastReadMediaToLicense> licenseReferences;
不幸的是,关系没有更新,所有属性都保持不变......
我们知道如何在回购中使用带注释的密码查询,但必须采用“抽象”方式?!
非常感谢!
此致
编辑:如果我从Set中删除关系,然后在节点上执行save(),则会删除该关系。只有更新不起作用!或者是意图?
答案 0 :(得分:1)
安迪,
SDN仅检查集合的修改,即添加和删除,它不检查每个关系的更改,这将更加昂贵。
通常可以通过存储库或模板保存关系而不是将其添加到集合然后保存节点来解决。那也更快。