我试图在Neo4j中插入两个节点之间的关系。我正在使用Neo4J(2.1.8社区)&弹簧数据的Neo4j(3.3.0.RELEASE)。
我正在尝试创建Employee-Manager关系。此关系实体是报告。 (两个班级如下)
但是当我试图保存关系船时
Employee manager = new Employee("Dev_manager", "Management");
Employee developer = new Employee("Developer", "Development");
developer.setReportsTo(manager);
developer.relatedTo(manager, "REPORTS_TO")
employeeRepository.save(developer);
我的异常是
线程“main”中的异常org.springframework.dao.DataRetrievalFailureException:RELATIONSHIP [0]没有propertyKey =“ type ”的属性。嵌套异常是org.neo4j.graphdb.NotFoundException:RELATIONSHIP [0]没有propertyKey =“ type ”的属性。
任何人都可以帮助我解释这段代码中的错误。
在我将Employee中的关系类型更改为
后,相同的代码可以正常工作@RelatedToVia(type = "REPORT_TO", elementClass = Report.class, direction = Direction.INCOMING)
注意:我正在使用本教程的this参考。
Employee.java 类
@NodeEntity
public class Employee {
@GraphId
private Long id;
private String name;
private String department;
@Fetch
@RelatedTo(type = "REPORTS_TO")
private Employee reportsTo; //Employee reports to some employee (i.e. Manager).
@Fetch
@RelatedTo(type = "REPORTS_TO", direction = Direction.INCOMING)
Set<Employee> directReport; //All the employees who reports to this particular this employee.
@Fetch
@RelatedToVia(type = "REPORTS_TO", elementClass = Report.class, direction = Direction.INCOMING)
Set<Report> relations = new HashSet<Report>(); // All the incoming relationship entities.
//*** Constructor, Getter-setters and other methods...
}
Report.java 类
@RelationshipEntity(type = "REPORTS_TO")
public class Report {
@GraphId
private Long id;
private String title;
@Fetch
@StartNode
private Employee child;
@Fetch
@EndNode
private Employee parent;
//*** Constructor, Getter-setters and other methods...
}
**更新:** 我使用这个类结构创建了2个关系。我得到了以下结果。
看起来它在节点之间创建了2个关系。 1是使用reportsTo(即REPORTS_TO)的空关系和使用关系的另一种关系(即REPORT_TO)。有谁可以请更新为什么会这样?
答案 0 :(得分:2)
relations
和directReport
之间的区别是什么?
我认为SDN只是与所有重复的关系列表混淆了?
ESP。如果它们曾被宣布为没有类型的轻关系,而曾被称为关系实体。
我认为对于这种情况,它使用起来更清晰,更容易
template.createRelationshipBetween(employee, manager, "REPORTS_TO");
或者只是创建,填充并保存关系实体Report
。
否则,您必须确保所有方面的所有集合彼此一致。