2016-06-14 63 views
2

我正在尝试在OGM上获取密码查询的结果。 基本上,我一直在关注这个教程:OGM TutorialNeo4j OGM MappingException

我有一个实体的接口(等同于一个在教程):

public abstract class Entity { 

    private Long id; 

    public Long getId() { 
     return id; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || id == null || getClass() != o.getClass()) return false; 

     Entity entity = (Entity) o; 

     if (!id.equals(entity.id)) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     return (id == null) ? -1 : id.hashCode(); 
    } 
} 

而且我有一个类称为MyClass的,从它继承:

@NodeEntity 
public class MyClass extends Entity { 
    private String field; 

    @Relationship(type="POINTS", direction=Relationship.OUTGOING) 
    private Set<Motif> next = new HashSet<Motif>(); 

    public MyClass(String field) { 
     this.field = field; 
    } 

    public String getField(){ 
     return this.field; 
    } 

    public void setField(String field) { 
     this.field = field; 
    } 

    public Set<Motif> getNext() { 
     return next; 
    } 

    public void setNext(Set<Motif> next) { 
     this.next = next; 
    } 

} 

我填充数据库没有问题,我也可以在浏览器中执行密码查询。

然而,当我尝试在我的这个搜索类应用程序中执行查询:

public class Searcher { 
    public Searcher() { 

    } 

    public void search() { 
     String query = "MATCH (a:MyClass)-[r:POINTS]->(b:MyClass) WHERE a.field='B315' RETURN b"; 
     Iterable<MyClass> objs = Neo4jSessionFactory.getInstance().getNeo4jSession().query(MyClass.class, query, Collections.EMPTY_MAP); 
     for(MyClass obj: objs) { 
      System.out.println(obj.getField()); 
     } 
    } 
} 

我收到以下错误:

Exception in thread "main" org.neo4j.ogm.exception.MappingException: Error mapping GraphModel to instance of <package>.MyClass 
    at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:145) 
    at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:117) 
    at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:81) 
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.executeAndMap(ExecuteQueriesDelegate.java:111) 
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.query(ExecuteQueriesDelegate.java:82) 
    at org.neo4j.ogm.session.Neo4jSession.query(Neo4jSession.java:323) 

Caused by: org.neo4j.ogm.exception.MappingException: Unable to instantiate class <package>.MyClass 
    at org.neo4j.ogm.annotations.EntityFactory.instantiate(EntityFactory.java:137) 
    at org.neo4j.ogm.annotations.EntityFactory.instantiateObjectFromTaxa(EntityFactory.java:110) 
    at org.neo4j.ogm.annotations.EntityFactory.newObject(EntityFactory.java:61) 
    at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:156) 
    at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:142) 
    ... 7 more 
Caused by: java.lang.NoSuchMethodException: <package>.MyClass.<init>() 
    at java.lang.Class.getConstructor0(Class.java:3082) 
    at java.lang.Class.getDeclaredConstructor(Class.java:2178) 
    at org.neo4j.ogm.annotations.EntityFactory.instantiate(EntityFactory.java:133) 
    ... 11 more 

所以我可能失去了一些东西,因为很明显即使MyClass类是节点实体,也不能映射MyClass类。

回答

8

MyClass.javarequires a no arg constructor。这是OGM无法实例化的原因。

+0

工程就像一个魅力。这是一个简单的修复。非常感谢你。 我刚刚添加了一个无参数构造函数给我的NodeEntity类,正如你所建议的。 – felipepo

+0

很高兴知道,请接受答案,谢谢:-) – Luanne

相关问题