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

使用现有节点在spring数据中创建Neo4j关系

司马洲
2023-03-14

我试图在Neo4j中创建节点之间的关系。我正在使用Neo4J(2.1.8社区)

我试图创建以下关系。

创建一个新的员工(节点),它将向DB中的Manager(节点)报告(空关系)(按名称搜索)。我使用了下面的查询。

public interface EmployeeRepository extends GraphRepository<Employee> {

@Query("START employee=node:({0}), manager=node:Employee(name={1}) CREATE employee-[:REPORTS_TO]->manager")
void addNewEmployee(Employee employee, String managerName);}

我得到了下面的错误。

Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement START employee=node:({0}), manager=node:Employee(name={1}) CREATE employee-[:REPORTS_TO]->manager; nested exception is Invalid input '(': expected whitespace or an identifier (line 1, column 21)
"START employee=node:({0}), manager=node:Employee(name={1}) CREATE employee-[:REPORTS_TO]->manager"
                     ^

谁能告诉我这个问题出了什么问题?另外,如果这不是使用GraphRespository创建关系的正确方法,那么我还可以使用什么来实现同样的目的呢。

提前感谢。

注意:我用它来学习Spring Data for Neo4j中的查询。其中显示了基本查询。

更新:员工类

@NodeEntity
public class Employee {

@GraphId
private Long id;
private String name;
private String department;

@RelatedTo(type = "REPORTS_TO")
private Employee reportsTo;

@RelatedTo(type = "REPORTS_TO", direction = Direction.INCOMING)
Set<Employee> directReport;

public Employee() {
}

public Employee(String name, String department) {
    this.name = name;
    this.department = department;
}

public Long getId() {
    return id;
}

public String getName() {
    return name;
}

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

public String getDepartment() {
    return department;
}

public void setDepartment(String department) {
    this.department = department;
}

public Employee getReportsTo() {
    return reportsTo;
}

public void setReportsTo(Employee reportsTo) {
    this.reportsTo = reportsTo;
}

public Set<Employee> getDirectReport() {
    return directReport;
}

public void setDirectReport(Set<Employee> directReport) {
    this.directReport = directReport;
}

@Override
public int hashCode() {
    return super.hashCode();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

@Override
public String toString() {
    return "Employee{" + "id=" + id + ", name=" + name + ", department=" + department + '}';
}
}

共有1个答案

盖晋
2023-03-14

请出示员工的定义!

您也可以使用模板。createRelationshipBetween(nodeOrEntity,nodeOrEntity2,type)

对于您的示例,这应该是可行的:

公共接口员工存储库扩展GraphRepository{

@Query("MATCH (employee:Employee), (manager:Employee) 
       WHERE id(employee) = {0} AND manager.name = {1}
       CREATE employee-[:REPORTS_TO]->manager")
void addNewEmployee(Employee employee, String managerName);
}

也许更好地使用,雇员作为雇员的数据容器/地图,或者直接传入名称:

@Query("MATCH (employee:Employee), (manager:Employee) 
       WHERE employee.name = {0}.name AND manager.name = {1}
       CREATE employee-[:REPORTS_TO]->manager")
void addNewEmployee(Employee employee, String managerName);
}
 类似资料:
  • 我需要创建一个新的A类节点,它与User节点有关系: 现在,假设我们有新节点A的以下数据: 我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为。 我正在使用GraphRespository代理创建它: 有没有办法不进行此更新,只与用户节点建立关系?

  • 我开始将Neo4J与Spring数据Rest一起使用。我有一个用于建模节点和边的节点实体和关系实体。我能够使用postman创建具有以下内容的新节点。 我不确定创建节点之间关系的JSON格式是什么。例如: 创建新节点并与现有节点关联 任何关于我需要使用什么JSON的例子都将不胜感激。 我的节点实体和关系实体如下:

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

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

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

  • 我的问题与此非常相似:如何通过在neo4j中导入的csv文件创建唯一的节点和关系?我有一个大约250万行的textfile,其中有两列,每一列都是节点ID: 每一行表示一个关系(即250万个关系):first_column nodeid->follows->second_column nodeid。这个文件中大约有80,000个唯一节点。 null 我的主要问题是我想知道如何使这个过程更快。这是在