Neo4j ogm核心创建而不是更新

时间:2017-11-26 22:18:18

标签: java graph neo4j graph-databases neo4j-ogm

我正在使用Neo4j ogm核心版本3.0.2。在我的图表中,我有一个名为gender的节点,可以简单地为男性或女性。如果某个节点已经存在,我希望它只是更新与现有节点的关系,而不是创建一个新节点。

以下是我设置性别的方法。

Gender personGender = new Gender();
Iterator<Map<String, Object>> result =
helper.queryByEntityAndName("Gender", gender);
if (result != null) {
     personGender = (Gender) result.next().get(queryNotation);
} else {
     personGender.setValue(gender);
}
person.setGender(personGender);

帮助程序queryByEntityAndName看起来像这个

public Iterator<Map<String, Object>> queryByEntityAndName(String entityName, String value) {
    String query = "match (e:" + entityName + "" +
            " {name: \"" + value + "\"}) return e";
    Iterable<Map<String, Object>> result = session.query(query, Collections.EMPTY_MAP);
    Iterator<Map<String, Object>> resultIterator = result.iterator();
    if (resultIterator.hasNext())
        return resultIterator;
    return null;
}

我将性别设置为值唯一

@Index(unique = true)
private String value;

在Person类中,Gender设置如下

@Relationship(type = "HAS_GENDER_OF")
private Gender gender;

1 个答案:

答案 0 :(得分:0)

您必须在Gender字符串属性中添加@Id注释。

除此之外,我认为可以通过用类似的方式替换手动构建的查询来简化代码 session.load(Gender.class, genderId)