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;