Как правильно обновить граф, содержащий удаление узлов с помощью данных весны neo4j?
Имейте простую структуру, как это.
@Data
public class DomainObject {
@GraphId
protected Long id;
public String createdBy;
public Date createdTS;
public String lstModBy;
public Date lstModTS;
}
@NodeEntity(label = "StepDef")
@Data
public class StepDef extends DomainObject{
private String name;
private String type;
private String catCode;
private String impClass;
private String scope;
@Relationship(type = "PROPERTY_OF" = Relationship.INCOMING)
private List<StepDefProperty> properties;
}
@NodeEntity(label = "StepDefProperty")
@Data
public class StepDefProperty extends DomainObject{
private String key;
private String value;
private String type;
private String lookupKey;
}
Когда я пытаюсь добавить объекты StepDefProperty в список свойств и использую stepRepo.save(stepDef), он отлично сохраняется, как и ожидалось, вместе с отношением.
Проблема заключается в удалении одного из свойств узла. Поэтому, если я удаляю один из узлов свойств из списка и использую repo.save(stepDef), узел свойств не удаляется. Я думал, что это может быть связано с непоследовательной сессией. Поэтому я попытался сделать stepRepo.findOne(stepDef.getId()) перед выполнением repo.save(stepDef). Теперь это удаляет связь между узлами, однако узел свойств все еще присутствует в базе данных как сирота, хотя ожидал, что свойство узла вместе с отношением, которое будет удалено. Как правильно делать обновления через данные весны neo4j?
1 ответ
Вы определенно правильно используете API, когда речь идет о разобщении отношений между StepDef
узел и StepDefProperty
связи.
Проблема в том, что вы не сказали OGM Session
что вы также хотите удалить узел на другом конце удаленного отношения.
Итак, вам нужно получить узел свойства, который нужно удалить, а также удалить его из коллекции в StepDef
, Вы можете позвонить repo.delete(StepDefPropertyToBeDeleted)
а также repo.save(stepDef)
и все получится так, как вы собираетесь.