[英]How to code the hierarchical relationship to the node of the same type properly in spring data neo4j?
我想使用Neo4j存儲一個樹數據結構。
有一個父節點:CodeSet
,它始終是樹的根,還有一個子節點:Node
,它們本身可以具有相同類型的子節點。 它們通過以下類型的關系連接:SUBTREE_OF
:
父節點顯示為紅色,並且其本身有一個父節點顯示為綠色。
一旦父節點和子節點有了一些通用數據,我就創建了一個抽象類:
public abstract class AbstractNode {
private Long id;
@NotEmpty
private String code;
@Relationship(type = "SUBTREE_OF", direction = Relationship.INCOMING)
private Set<Node> children;
<getters & setters omitted>
}
父節點的類:
public class CodeSet extends AbstractNode {
@Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING)
private Application parent;
<getters and setters omitted>
}
子節點的類:
public class Node extends AbstractNode {
@NotEmpty
private String description;
@NotEmpty
private String type;
@NotEmpty
private String name;
@NotNull
@Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING)
private AbstractNode parent;
<getters and setters omitted>
}
我需要的只是對子節點進行更新。 我在服務層使用以下方法:
public Node update(Node node, Long nodeId) throws EntityNotFoundException {
Node updated = findById(nodeId, 0);
updated.setDescription(node.getDescription());
updated.setType(node.getType());
updated.setName(node.getName());
updated.setCode(node.getCode());
nodeRepository.save(updated);
return updated;
}
有了這個我得到以下結果: 關系破裂了。 我還嘗試在findById
方法參數中指定depth=1
,但這又導致錯誤的關系:
之后,我嘗試將類中的雙向關系修改為單向性,這樣只有一個類具有帶@Relatinship
字段的注釋,該注釋指向另一個,但是這也無濟於事。
如何使這項工作?
通過更新服務方法中的保存操作來解決:
public Node update(Node node, Long nodeId) throws EntityNotFoundException {
Node updated = findById(nodeId, 0);
updated.setDescription(node.getDescription());
updated.setType(node.getType());
updated.setName(node.getName());
updated.setCode(node.getCode());
//added param depth=0 here
nodeRepository.save(updated, 0);
return updated;
}
您在抽象類中對關系的定義可能存在問題。 子節點也繼承INCOMING關系,因此當您使用深度1更新時,關系是雙向的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.