У меня есть график, на котором некоторые узлы могут иметь несколько меток, например
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?