Neo4j SDN4 OGM模糊BaseClasseException

Neo4j SDN4 OGM模糊BaseClasseException,neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,我遇到了这样一个问题:我的一些Neo4J查询(如下面的查询)最终导致OGM AmbiguousBaseClasseException,而其他查询则没有。例如,电影“the Score”的FindBytle会抛出一个异常,但“the Matrix”不会。我的图表由在中找到的电影数据库填充 我无法找到对上述观察的解释,我希望有人能提供帮助 卷曲 Neo4j服务器:3.1.0 Spring-data-neo4j:4.1.1 org.springframework.web.util.NestedServ

我遇到了这样一个问题:我的一些Neo4J查询(如下面的查询)最终导致OGM AmbiguousBaseClasseException,而其他查询则没有。例如,电影“the Score”的FindBytle会抛出一个异常,但“the Matrix”不会。我的图表由在中找到的电影数据库填充

我无法找到对上述观察的解释,我希望有人能提供帮助

卷曲

Neo4j服务器:3.1.0

Spring-data-neo4j:4.1.1

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.neo4j.ogm.exception.MappingException: Error mapping GraphModel to instance of com.knowledgeGraph.kgClient.domain.Movie
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.28.jar:8.0.28]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.28.jar:8.0.28]

Caused by: org.neo4j.ogm.exception.AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to: [Person, Actor, Director]
at org.neo4j.ogm.MetaData.resolve(MetaData.java:174) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.resolve(EntityFactory.java:121) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.instantiateObjectFromTaxa(EntityFactory.java:105) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.newObject(EntityFactory.java:61) ~[neo4j-ogm-core-2.0.1.jar:na]
域对象:

电影类:

import static org.neo4j.graphdb.Direction.INCOMING;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.voodoodyne.jackson.jsog.JSOGGenerator;

@JsonIdentityInfo(generator=JSOGGenerator.class)
@NodeEntity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Movie {

@GraphId Long nodeId;
String id;
String title;
String description;

@Relationship(type="DIRECTED", direction = Relationship.INCOMING)
List<Person> directors;

@Relationship(type="ACTS_IN", direction = Relationship.INCOMING)
List<Person> actors;

private String language;
private String imdbId;
private String tagline;
private String releaseDate;
private Integer runtime;
private String homepage;
private String trailer;
private String genre;
private String studio;
private Integer version;
private String lastModified;
private String imageUrl;

public Movie() { }

public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}

/*Remaining Set's and Get's*/

}
导演班:

@NodeEntity
public class Director extends Person{

@GraphId
Long id;

public Director() {
}

@Relationship(type="DIRECTED", direction = Relationship.OUTGOING)
private List<Movie> directedMovies = new ArrayList<Movie>();

public List<Movie> getDirectedMovies() {
    return directedMovies;
}

public void setDirectedMovies(List<Movie> directedMovies) {
    this.directedMovies = directedMovies;
}

}
@NodeEntity
public class Actor extends Person {

@GraphId
Long id;

public Actor() {
}

@Relationship(type="ACTS_IN", direction = Relationship.OUTGOING)
private List<Movie> actedMovies = new ArrayList<Movie>();

public List<Movie> getMovies() {
    return actedMovies;
}

public void setMovies(List<Movie> movies) {
    this.actedMovies = movies;
}
}
@NodeEntity
公共类主管扩展个人{
@格拉希德
长id;
公共董事(){
}
@关系(type=“DIRECTED”,direction=Relationship.OUTGOING)
private List directedMovies=new ArrayList();
公共列表getDirectedMovies(){
返回定向视频;
}
公共无效设置directedMovies(列出directedMovies){
this.directedMovies=directedMovies;
}
}
演员级别:

@NodeEntity
public class Director extends Person{

@GraphId
Long id;

public Director() {
}

@Relationship(type="DIRECTED", direction = Relationship.OUTGOING)
private List<Movie> directedMovies = new ArrayList<Movie>();

public List<Movie> getDirectedMovies() {
    return directedMovies;
}

public void setDirectedMovies(List<Movie> directedMovies) {
    this.directedMovies = directedMovies;
}

}
@NodeEntity
public class Actor extends Person {

@GraphId
Long id;

public Actor() {
}

@Relationship(type="ACTS_IN", direction = Relationship.OUTGOING)
private List<Movie> actedMovies = new ArrayList<Movie>();

public List<Movie> getMovies() {
    return actedMovies;
}

public void setMovies(List<Movie> movies) {
    this.actedMovies = movies;
}
}
@NodeEntity
公共类参与者扩展个人{
@格拉希德
长id;
公共行为者(){
}
@关系(type=“ACTS_IN”,direction=Relationship.OUTGOING)
private List actedMovies=new ArrayList();
公共列表getMovies(){
返回已激活的视频;
}
公共电影(列出电影){
this.actedMovies=电影;
}
}
存储库:

public interface ActorRepository extends GraphRepository<Actor>{

    @Query("MATCH (a:Actor) -[:ACTS_IN]-> (m:Movie {`title`:{title}}) return a")
    Collection<Actor> findActorsOfMovie(@Param("title") String title);
}


public interface DirectorRepository extends GraphRepository<Director>{

    @Query("MATCH (d:Director) -[:DIRECTED]-> (m:Movie {`title`:{title}}) return d")
    Collection<Director> findDirectorOfMovie(@Param("title") String title);

}

public interface MovieRepository extends GraphRepository<Movie>{

    Movie findByTitle(@Param("title") String title);

    @Query("MATCH (m:Movie) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m")
    Collection<Movie> findByTitleContaining(@Param("title") String title);
}

public interface PersonRepository extends GraphRepository<Person>{

    @Query("MATCH (a:Person) -[:ACTS_IN]-> (m:Movie {`title`:{title}}) return a")
    Set<Person> findActorsOfMovie(@Param("title") String title);

    @Query("MATCH (d:Person) -[:DIRECTED]-> (m:Movie {`title`:{title}}) return d")
    Set<Person> findDirectorOfMovie(@Param("title") String title);
}
公共接口ActorRepository扩展了GraphRespository{
@查询(“匹配(a:Actor)-[:ACTS_IN]->(m:Movie{`title`:{title}})返回a”)
集合findActorsOfMovie(@Param(“title”)字符串标题);
}
公共接口DirectorRepository扩展了GraphRespository{
@查询(“匹配(d:Director)-[:DIRECTED]->(m:Movie{`title`:{title}})返回d”)
集合findDirectorOfMovie(@Param(“title”)字符串标题);
}
公共接口MovieRepository扩展了graphrespository{
电影FindBytle(@Param(“title”)字符串标题);
@查询(“匹配(m:Movie),其中m.title=~('(?).*'+{title}+'.*)返回m”)
集合findBytileContaining(@Param(“title”)字符串标题);
}
公共接口PersonRepository扩展了GraphRespository{
@查询(“MATCH(a:Person)-[:ACTS_IN]->(m:Movie{`title`:{title}})返回a”)
设置findActorsOfMovie(@Param(“title”)字符串标题);
@查询(“匹配(d:Person)-[:定向]->(m:Movie{`title`:{title}})返回d”)
设置findDirectorOfMovie(@Param(“title”)字符串标题);
}

通过删除Actor和Director域类以及带有Actor list和Director list的used Person类解决了此问题