当前位置: 首页 > 知识库问答 >
问题:

使用Spring数据Rest和neo4j创建节点之间的关系

施自怡
2023-03-14

我开始将Neo4J与Spring数据Rest一起使用。我有一个用于建模节点和边的节点实体和关系实体。我能够使用postman创建具有以下内容的新节点。

POST http://localhost:8080/nodes
{  
    "name" : "Test"
}

我不确定创建节点之间关系的JSON格式是什么。例如:

  1. 创建新节点并与现有节点关联

任何关于我需要使用什么JSON的例子都将不胜感激。

我的节点实体和关系实体如下:

@NodeEntity
public class Node {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private int count;

    @Relationship(type = Edge.TYPE, direction = Relationship.UNDIRECTED)
    private Set<Edge> edges = new HashSet<>();

    public void addEdge(Node target, int count) {
        this.edges.add(new Edge(this, target, count));
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<Edge> getEdges() {
        return edges;
    }

    public void setEdges(Set<Edge> edges) {
        this.edges = edges;
    }
}

@RelationshipEntity(type = Edge.TYPE)
public class Edge {

    public static final String TYPE = "LINKED_TO";

    @Id
    @GeneratedValue
    private Long relationshipId;

    @StartNode
    private Node start;

    @EndNode
    private Node end;

    private int count;

    public Edge() {
        super();
    }

    public Edge(Node start, Node end, int count) {
        this.start = start;
        this.end = end;
        this.count = count;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public Node getStart() {
        return start;
    }

    public void setStart(Node start) {
        this.start = start;
    }

    public Node getEnd() {
        return end;
    }

    public void setEnd(Node end) {
        this.end = end;
    }

    public Long getRelationshipId() {
        return relationshipId;
    }

    public void setRelationshipId(Long relationshipId) {
        this.relationshipId = relationshipId;
    }
}

共有1个答案

庄文栋
2023-03-14

好的,我解决了,你可以这样做:

PATCH http://localhost:8080/nodes/1

{  
    "name" : "Test",
    "edges": [
        {
            "start": "http://localhost:8080/nodes/1",
            "end": "http://localhost:8080/nodes/2"
        }
    ]
}

这将添加节点之间的关系。

希望这能帮助到某人。

 类似资料:
  • 在使用@RepositoryRestResource将域对象导出到Rest时,如何在Java中创建Neo4j关系?

  • 我试图在Neo4j中创建节点之间的关系。我正在使用Neo4J(2.1.8社区) 我试图创建以下关系。 创建一个新的员工(节点),它将向DB中的Manager(节点)报告(空关系)(按名称搜索)。我使用了下面的查询。 我得到了下面的错误。 谁能告诉我这个问题出了什么问题?另外,如果这不是使用GraphRespository创建关系的正确方法,那么我还可以使用什么来实现同样的目的呢。 提前感谢。 注意

  • 我使用的是Spring数据Neo4j 3.3。1.2与Neo4j服务器一起发布。3. 我的问题是有一些节点是我的实体的副本,但它只有索引属性。 我的班级看起来像这样 当一个新节点被创建时,我首先检查是否有一个现有的节点,如果它存在就更新它,否则创建一个新的节点。 存储库接口。 在Neo4j中,实体被创建到具有所有属性的节点。但是有些节点也有一个只包含productId的重复节点。问题是这并没有发生

  • 我希望它创建每个节点(而不是在已经存在具有相同ID的节点时创建新节点),并创建每个关系(在CSV中指定具有多个关系的节点中有多个关系from/to节点)。 实际发生的情况:它似乎创建了所有唯一的节点。它还创建了节点之间的关系,但它只为每个节点设置一个关系,而不考虑与多个其他节点进行通信的一些节点。 我很困惑,因为我的理解是,如果在数据库中还没有出现关系,它将创建关系,所以我认为它将创建CSV中指定

  • 当我使用SpringDataNeo4j在数据库中持久化节点时。它保留重复的节点,如“person”和“_person”。它都包含相同的数据。所以我想阻止sdn的这种行为。 我没有使用任何继承,只是每个类都有所有属性。 另外,如果我直接从neo4j服务器插入数据,sdn将无法获取它。

  • 使用cypher和neo4j 2.0。 给定两组节点ID(长度相等)和一组权重,我想在相应的节点之间创建一个关系,并将权重设置为属性。例如,如果我有以下三个列表: 我想创建以下表示形式 但不是,例如 我可以通过迭代我的参数,然后创建单独的查询来实现这一点。有没有一种方法来批量运行它,将我的lsits作为参数传递,并要求按顺序匹配节点和属性? 我曾一度认为以以下方式使用参数会起作用,但它会创建关系的