簡體   English   中英

如何在spring數據neo4j中正確編碼與相同類型節點的層次關系?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM