2016-06-14 4 views
2

Я пытаюсь получить результаты запроса cypher на OGM. В основном, я следил за этим уроком: OGM Tutorial.Neo4j 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; 
    } 

} 

Я Наполнение базы данных без проблем, и я могу выполнять запросы cypher в браузере.

Однако, когда я пытаюсь выполнить запрос по моему заявлению, с этим классом поиска:

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 не может быть сопоставлен, хотя это узел.

ответ

8

MyClass.javarequires a no arg constructor. Именно по этой причине он не может быть создан OGM.

+0

Работает как очарование. Это было простое решение. Большое спасибо. Я просто добавил конструктор аргументов в свой класс NodeEntity, как вы предложили. – felipepo

+0

Полезно знать, пожалуйста, примите ответ, спасибо :-) – Luanne

Смежные вопросы