通过spring数据neo4j更新包含节点删除的图表的正确方法是什么?

时间:2016-10-29 01:57:34

标签: spring-data-neo4j spring-data-neo4j-4 neo4j-ogm

有一个像这样的简单结构。

@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)时,它会按照预期与关系一起完美保存。

enter image description here

问题在于删除其中一个属性节点。因此,如果我从列表中删除其中一个属性节点并使用repo.save(stepDef),则不会删除属性节点。 我认为这可能与不一致的会话有关。 所以我在做repo.save之前尝试做一个stepRepo.findOne(stepDef.getId())(stepDef) 现在,这将删除节点之间的关系,但是属性节点仍然作为孤立存在于数据库中,同时预期属性节点以及关系将被删除。 enter image description here 通过spring数据neo4j进行更新的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

在解除StepDef节点与StepDefProperty关系之间的关系时,您肯定正确使用API​​。

问题是您没有告诉OGM Session您还要删除已移除关系另一端的节点。

因此,您需要做的是检索要删除的属性节点,并将其从StepDef中的集合中删除。然后,您可以拨打repo.delete(StepDefPropertyToBeDeleted)repo.save(stepDef),一切都会以您的方式运作。