SDN关系未被删除

时间:2017-04-28 11:33:46

标签: spring neo4j spring-data spring-data-neo4j

我想使用spring-data-neo4j在neo4j中实现时间树。 下图显示时间树,当前仅包含根节点(223)以及2016年和2018年。

Example tree with two years

如果我现在要添加2017,我想要结果2016 - [:next] - > 2017-> [:next] - > 2018以及2016和2018之间的下一个关系将被删除。

这应该通过根节点的createChild方法来实现:

public TimeNode createChild(int value) {
    TimeNode newChild = new Year();
    newChild.setValue(value);

    if (!this.hasChildren()) {
        this.setFirstChild(newChild);
        this.setLastChild(newChild);
    } else if (this.getFirstChild().getValue() > value) {
        //new node is first child
        newChild.setNextNode(this.getFirstChild());
        this.setFirstChild(newChild);
    } else if (this.getLastChild().getValue() < value) {
        //new node is last child
        newChild.setPreviousNode(this.getLastChild());
        this.setLastChild(newChild);
    } else {
        TimeNode previous = this.getFirstChild();
        TimeNode next = this.getLastChild();
        for (TimeNode current : this.getChildren()) {
            if (current.getValue() < value){
                if (current.getValue() > previous.getValue()) previous = current;
            }
            else if (current.getValue() < next.getValue()) next = current;
        }
        System.out.println("Previous is "+previous.getValue());
        System.out.println("Next is "+next.getValue());
        newChild.setPreviousNode(previous);
        newChild.setNextNode(next);
    }
    this.addChild(newChild);
    return newChild;
}

通过控制台输出我可以确认,前一个和下一个被设置为2016和2018. nextNode和previousNode声明如下:

@JsonIgnore
@Relationship(type = "NEXT")
private TimeNode nextNode = null;

@JsonIgnore
@Relationship(type = "NEXT", direction = Relationship.INCOMING)
private TimeNode previousNode = null;

创建新的childNode后,我调用

timeNodeRepository.save(foundYear,2);

在通话服务中。存储库是标准存储库

@Repository
public interface TimeNodeRepository extends GraphRepository<TimeNode> 

但是,当我使用此代码添加节点2017时,我最终会得到一个图表,因为我希望在2016年和2018年之间增加额外的&#34;下一个&#34; - 因此不会被删除。 / p>

如何强制图形替换2016年的nextNode而不是添加另一个呢?

I might add that previousNode and ne xtNode都设置为关系:

我可以补充说setNextNode也设置了上一个节点:

public void setNextNode(TimeNode nextNode) {
    this.nextNode=null;
    if (nextNode==null) return;
    nextNode.previousNode = this;
    this.nextNode = nextNode;
}

setPreviousNode反之亦然。

0 个答案:

没有答案