我想使用spring-data-neo4j在neo4j中实现时间树。 下图显示时间树,当前仅包含根节点(223)以及2016年和2018年。
如果我现在要添加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而不是添加另一个呢?
我可以补充说setNextNode也设置了上一个节点:
public void setNextNode(TimeNode nextNode) {
this.nextNode=null;
if (nextNode==null) return;
nextNode.previousNode = this;
this.nextNode = nextNode;
}
setPreviousNode反之亦然。