0
votes

I am using Neo4j ogm core version 3.0.2. In my graph, I have a node called gender which can simply be either male or female. If a node male already exists I want it to just update the relationship to the existing node instead of creating a new one.

Here is how I set the 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);

The helper queryByEntityAndName looks like this

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

I set Gender to be unique by value

@Index(unique = true)
private String value;

In the Person class, Gender is set like this

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

1 Answers

0
votes

You have to add the @Id annotation on the Gender string attribute.

Besides that I think the code could be simplified by replacing the manually built query with something like session.load(Gender.class, genderId)