2016-02-09 83 views
0

我试图执行一个查询返回一个路径,但是,尽管在neo4j Web UI执行的查询返回正确的结果,neo4j-ogm返回null。我已经从Maven安装了neo4j-ogm-api,core:2.0.0-M01Neo4j OGM 2.0查询路径

我的Java代码如下:

Root.java:

@NodeEntity 
public class Root 
{ 
    @GraphId 
    public Long id; 

    @Relationship(type = "Branch", direction = Relationship.OOUTGOING) 
    public List<Branch> branches = new ArrayList<>(); 

    public Branch addLeaf(Leaf leaf, float length) 
    { 
     Branch b = new Branch(this, leaf); 
     b.length = length; 
     leaf.branch = b; 
     branches.add(b); 
     return b;   
    } 
} 

Leaf.java:

@NodeEntity 
public class Leaf 
{ 
    @GraphId 
    public Long id; 

    @Property 
    public String color; 

    @Relationship(type = "Branch", direction = Relationship.INCOMING) 
    public Branch branch; 
} 

Branch.java:

@RelationshipEntity 
public class Branch 
{   
    @GraphId 
    public Long id; 

    public Branch(Root root, Leaf leaf) 
    { 
     this.root = root; 
     this.leaf = leaf; 
    } 

    @Property 
    public float length; 

    @StartNode 
    public Root root; 

    @EndNode 
    public Leaf leaf; 
} 

然后,为了测试我们做

public class Main { 

    public static void main(String[] args) { 

     SessionFactory sessionFactory = new SessionFactory("com.my.package.name"); 
     Session session = sessionFactory.openSession(); 

     Root r = new Root() 
     r.addLeaf(new Leaf(), 1); 
     r.addLeaf(new Leaf(), 2); 
     session.save(r); 

     //Until this point everything is alright and 
     // all 3 nodes and 2 relationships are created 

     String query = "MATCH path = (l1:Leaf)-[*1..100]-(l2:Leaf) WITH path LIMIT 1 RETURN path"; 
     QueryResultModel qrm = session.query(query, new HashMap<String, Object>()); 
     // qrm.result.get(0).get("path") is null 
    } 
} 

请向我解释我做错了什么?

回答

1

不支持返回完整路径。相反,你需要返回要映射到域实体的节点和关系,如:

MATCH path = (l1:Leaf)-[*1..100]-(l2:Leaf) WITH path,l1 LIMIT 1 RETURN l1,nodes(path),rels(path)

这会给你一个org.neo4j.ogm.session.Result对象。如果您从底层的Map中检索l1,则应该有一个完全水合的Leaf实体。

顺便说一句,不确定QueryResultModel是什么 - 只有SDN支持QueryResult。

+0

啊,谢谢。关于QueryResult,在测试时,我使用了Object qrm = session.query ... :)))我希望迟早neo4j-ogm将支持与py2neo相同的功能。 – Vahagn