简体   繁体   English

Neo4j OGM MappingException

[英]Neo4j OGM MappingException

I am trying to get the results of a cypher query on OGM. 我试图在OGM上获得密码查询的结果。 Basically, I have been following this tutorial: OGM Tutorial . 基本上,我一直在学习本教程: OGM教程

I have an entity interface (identical to the one on the tutorial): 我有一个实体接口(与教程中的接口相同):

    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();
    }
}

And I have an class called MyClass that inherits from it: 我有一个名为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;
    }

}

I am populating the database with no problem and I can perform the cypher queries within the browser as well. 我正在填充数据库没有问题,我也可以在浏览器中执行密码查询。

However, when I try to execute a query on my application with this search class: 但是,当我尝试使用此搜索类在我的应用程序上执行查询时:

    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());
        }
    }
}

I get the following error: 我收到以下错误:

    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

So I might be missing something, because apparently my MyClass class cannot be mapped even though it's a node entity. 所以我可能会遗漏一些东西,因为显然我的MyClass类无法映射,即使它是一个节点实体。

MyClass.java requires a no arg constructor . MyClass.java 需要一个没有arg的构造函数 This is the reason it cannot be instantiated by the OGM. 这就是OGM无法实例化的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM