Why neo4j-ogm not saves relations to embedded neo4j-database?
我试图获得一个带有 spring-boot、joinfaces 和带有对象映射 ogm 的嵌入式 neo4j-graph-database 的嵌入式 tomcat 服务器的工作系统。一切似乎都很好。我将我的资源提交给 https://svn.riouxsvn.com/circlead-embedd/circlead-embedded/
问题在于所有 neo4j-ogm-examples(参见 http://www.hascode.com/2016/07/object-graph-mapping-by-example-with-neo4j-ogm-and-java/ ) 表明@Relationship 与 ogm 一起使用。但是当我用
测试它时
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @NodeEntity public abstract class GenericNode< T > implements INode< T > { @GraphId public Long id; @SuppressWarnings("unused") private void setId(Long id) { this.id = id; } public String label; @Relationship(type ="PARENT_OF", direction = Relationship.INCOMING) public Set< T > parents = new HashSet< T >(); @Relationship(type ="CHILD_OF", direction = Relationship.OUTGOING) public Set< T > children = new HashSet< T >(); ... |
那么所有关系似乎都没有写入数据库,因为行
1 2 3 4 5 6 7 8 9 | Role rp = new Role("Role 1"); Role rc = new Role("Role 2"); rc.addParent(rp); session.save(rc); Iterable<Role> roles = session.query(Role.class,"MATCH (x) RETURN x;", Collections.<String, Object>emptyMap()); for (Role role : roles) { System.out.println(role); } |
在控制台中显示缺少数据库的关系。似乎只有在活动的会话关系中才能找到。服务器重新启动后,所有关系都丢失了。
1 2 3 4 | Role [id=52, label=Role 2, parents=[]] Role [id=53, label=Role 1, parents=[]] Role [id=54, label=Role 1, parents=[]] Role [id=55, label=Role 2, parents=[54]] |
我不知道发生这种错误的原因。我使用 neo4j-ogm 2.1.2 和 neo4j 3.1.3。
有什么想法吗?
您看到的结果是预期的——neo4j-ogm 映射了您在密码查询中返回的内容(加上您在会话中已有的内容)。如果您还想要相关实体,则返回关系和其他节点:
1 | MATCH (x)-[r]-(x2) RETURN x,r,x2 |
或者如果你想要,例如只有父字段水合:
1 | MATCH (x)<-[r:PARENT_OF]-(p) RETURN x,r,p |
这只会给第一级补水。要水合所有级别(父级的父级),您需要使用可变长度路径并返回其节点和关系(直接返回路径不可靠):
1 | MATCH p=(x)-[:PARENT_OF*..]-() RETURN nodes(p),rels(p) |