Получить узел, имеющий несколько меток, используя neo4j-ogm - PullRequest
0 голосов
/ 30 января 2019

У меня есть график, на котором некоторые узлы могут иметь несколько меток, например

Canonical, JobTitle - это метки, присвоенные одному и тому же узлу (Каждый узел Canonical является узлом JobTitle ине наоборот) (с именем «supervisor»).

Я определил класс моего узла следующим образом

@NodeEntity(label="JobTitle")
public class JobTitle {
    @Id @GeneratedValue
    private Long id;

    private Integer count;
    private String name;
    private String name_lower;
    // other getter methods
}

@NodeEntity(label="Canonical")
public class CanonicalJobTitle extends JobTitle{

    private Integer depth;

    public Integer getDepth(){
        return depth;
    }
}

, а мой класс nodeDAO определен как

public class NodeDAO<T> {
    private static final int DEPTH_LIST = 0;
    private static final int DEPTH_ENTITY = 1;
    final Class<T> typeParameterClass;
    private Session session;

    public NodeDAO(Session session, Class<T> typeParameterClass) {
        this.session = session;
        this.typeParameterClass = typeParameterClass;
    }

    public Iterable<T> matchRaw(String query){
        return this.query(query);
    }
}

Я пытаюсь запустить простой запрос, но получаю следующую ошибку

String query = "match (n:JobTitle{name_lower:\"supervisor\"}) return n";
// Both of the line below gives the same exception
//Iterable<CanonicalJobTitle> titles = CanonicalJobTitleNodeDAO.matchRaw(query);
Iterable<JobTitle> titles = JobTitleNodeDAO.matchRaw(query);

И ошибка AmbiguousBaseClassException -

[main] INFO org.neo4j.ogm.drivers.bolt.request.BoltRequest - Request: match (n:JobTitle{name_lower:"supervisor"}) return n with params {}
[main] WARN org.neo4j.ogm.session.Neo4jSession - Error executing query : Multiple classes found in type hierarchy that map to: [Canonical, JobTitle]. Rolling back transaction.
Exception in thread "main" org.neo4j.ogm.exception.core.AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to: [Canonical, JobTitle]
    at org.neo4j.ogm.metadata.MetaData.resolve(MetaData.java:193)
    at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:215)
    at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:200)
    at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:132)
    at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:88)
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.lambda$executeAndMap$1(ExecuteQueriesDelegate.java:124)
    at org.neo4j.ogm.session.Neo4jSession.doInTransaction(Neo4jSession.java:544)
    at org.neo4j.ogm.session.Neo4jSession.doInTransaction(Neo4jSession.java:523)
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.executeAndMap(ExecuteQueriesDelegate.java:120)
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.query(ExecuteQueriesDelegate.java:90)
    at org.neo4j.ogm.session.Neo4jSession.query(Neo4jSession.java:414)
    at com.bold.dataScience.registryService.NodeDAO.query(NodeDAO.java:51)
    at com.bold.dataScience.registryService.NodeDAO.matchRaw(NodeDAO.java:69)
    at com.bold.dataScience.ontology.skill.models.App.testJobTitleOntology(App.java:224)
    at com.bold.dataScience.ontology.skill.models.App.main(App.java:247)

Вот мои maven зависимости для neo4j

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-ogm-core</artifactId>
        <version>3.1.0</version>
      </dependency>

    <dependency> <!-- If you're using the HTTP driver -->
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-ogm-http-driver</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency> <!-- If you're using the Bolt driver -->
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-ogm-bolt-driver</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency> <!-- If you're using the Embedded driver -->
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-ogm-embedded-driver</artifactId>
        <version>3.1.0</version>
    </dependency>

Как обрабатывать узлы с несколькими метками в neo4j-ogm?

...