0

我们正在使用 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(),则关系被删除。只有更新不起作用!或者这就是意图?

4

1 回答 1

1

安迪,

SDN 仅检查集合的修改,也就是添加和删除,它不会检查每个关系的更改,这将更加昂贵。

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

于 2013-08-15T13:12:29.597 回答