I am trying to perform a query which returns a path, however, although the same query executed in neo4j Web UI
returns a correct result, the neo4j-ogm
returns null
. I have installed neo4j-ogm-api,core:2.0.0-M01
from Maven.
My java code looks as follows:
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;
}
Then, for testing let's do
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
}
}
Please, explain to me what am I doing wrong?
Returning a full path is not supported. Instead, you need to return the nodes and relationships that you want mapped back to domain entities, such as:
MATCH path = (l1:Leaf)-[*1..100]-(l2:Leaf) WITH path,l1 LIMIT 1 RETURN l1,nodes(path),rels(path)
This will give you an org.neo4j.ogm.session.Result
object. If you retrieve l1 from the underlying Map, you should have a fully hydrated Leaf entity.
BTW not sure what QueryResultModel
is- a QueryResult is only supported in SDN.