簡體   English   中英

使用現有節點在彈簧數據中創建Neo4j關系

[英]Create Neo4j relation in spring data with existing node

我正在嘗試在Neo4j中創建節點之間的關系。 我正在使用Neo4J(2.1.8 Community)spring-data-neo4j(3.3.0.RELEASE)

我正在嘗試創建以下關系。

創建一個新的Employee(節點),它將向數據庫中的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"
                     ^

誰能告訴我這個查詢有什么問題。 同樣,如果這不是使用GraphRepository創建關系的正確方法,那么我還能用什么來完成相同的工作。

提前致謝。

注意:我已經用來學習Spring Data中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 + '}';
}
}

請顯示員工的定義!

您也可以使用template.createRelationshipBetween(nodeOrEntity,nodeOrEntity2,type)

對於您的示例,這應該工作:

公共接口EmployeeRepository擴展了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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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