【问题标题】:Neo4j ogm core creates instead of updateNeo4j ogm 核心创建而不是更新
【发布时间】:2017-11-26 22:18:17
【问题描述】:

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

这是我设置性别的方式。

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;
}

我将 Gender 设置为值唯一

@Index(unique = true)
private String value;

在 Person 类中,Gender 是这样设置的

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 根据参考章节,他们建议不要用@id注释任何东西,但我试过了,还是不行。
    • 你能指出参考文献中的那部分吗?
    • 实际上,我意识到我看错了。使用 @Id 注释有效,但当我同时保存多个同名实体时无效。
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多