有一个像这样的简单结构。
@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),则不会删除属性节点。 我认为这可能与不一致的会话有关。 所以我在做repo.save之前尝试做一个stepRepo.findOne(stepDef.getId())(stepDef) 现在,这将删除节点之间的关系,但是属性节点仍然作为孤立存在于数据库中,同时预期属性节点以及关系将被删除。 通过spring数据neo4j进行更新的正确方法是什么?
答案 0 :(得分:0)
在解除StepDef
节点与StepDefProperty
关系之间的关系时,您肯定正确使用API。
问题是您没有告诉OGM Session
您还要删除已移除关系另一端的节点。
因此,您需要做的是检索要删除的属性节点,并将其从StepDef
中的集合中删除。然后,您可以拨打repo.delete(StepDefPropertyToBeDeleted)
和repo.save(stepDef)
,一切都会以您的方式运作。