2016-06-14 71 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

相關問題