首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j SDN4 OGM AmbiguousBaseClassException

Neo4j SDN4 OGM AmbiguousBaseClassException
EN

Stack Overflow用户
提问于 2017-02-01 16:36:40
回答 1查看 987关注 0票数 0

我遇到了一个问题,我的一些像下面这样的Neo4J查询在OGM AmbiguousBaseClassException中结束,而另一些则不是。例如,电影"The Score“的findByTitle抛出了一个异常,但”黑客帝国“却没有。我的图表是由https://neo4j.com/developer/example-data/上的电影数据库填充的

我无法对上述观察结果作出解释,我希望有人能帮助我。

卷曲http://localhost:8080/movies/search/findByTitle?title=The%20Score

Neo4j服务器: 3.1.0

Spring-data-ne4j:4.1.1

代码语言:javascript
运行
复制
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]

域对象:

电影类:

代码语言:javascript
运行
复制
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*/

}

Person类:

代码语言:javascript
运行
复制
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import com.fasterxml.jackson.annotation.JsonSubTypes;

@NodeEntity
@JsonSubTypes({
@JsonSubTypes.Type(value = Actor.class, name = "actor"),
@JsonSubTypes.Type(value = Director.class, name = "director")
})

public class Person {

    @GraphId Long nodeId;
    String id;
    String name;
    private String birthday;
    private String birthplace;
    private String biography;
    private Integer version;
    private String lastModified;
    private String profileImageUrl;

    public Person () {}

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

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

}

Director类:

代码语言:javascript
运行
复制
@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;
}

}

执行元类:

代码语言:javascript
运行
复制
@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;
}
}

存储库:

代码语言:javascript
运行
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-02 10:14:34

通过删除Actor和Director域类并将Person类与Actor列表和director列表一起使用,解决了此问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41975183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档