Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何使节点具有多种类型?_Neo4j_Spring Data Neo4j - Fatal编程技术网

Neo4j 如何使节点具有多种类型?

Neo4j 如何使节点具有多种类型?,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,我正在做一个测试电影项目来学习neo4j和SDN,我面临一个问题: 正如你们所知,电影导演可能是制片人、作家,甚至是演员。在我的java类体系结构中,我有Person超类。它有孩子:制片人、导演、演员和作家。所有这些子节点都位于同一级别,因此它们是不兼容的类型。 而另一方面,在neo4j中,我有同时是制作人、导演和编剧的节点 因此,当我想通过repository.findAll()方法(或通过带有Cypher查询的自定义方法)获取所有控制器时,我遇到了一个问题。春天告诉我: java.lang

我正在做一个测试电影项目来学习neo4j和SDN,我面临一个问题:

正如你们所知,电影导演可能是制片人、作家,甚至是演员。在我的java类体系结构中,我有Person超类。它有孩子:制片人、导演、演员和作家。所有这些子节点都位于同一级别,因此它们是不兼容的类型。

而另一方面,在neo4j中,我有同时是制作人、导演和编剧的节点


因此,当我想通过repository.findAll()方法(或通过带有Cypher查询的自定义方法)获取所有控制器时,我遇到了一个问题。春天告诉我:

java.lang.IllegalArgumentException:无法设置java.util.set字段 com.test.db.domain.Producer.producedMovies to com.test.db.domain.Director

我使用Neo4j 2.0.1和弹簧数据Neo4j 3.0.0.0.0发布版

解决此类问题的正确方法是什么


更新:
下面是代码:

公共类应用程序{
公共静态void main(字符串[]args){
ApplicationContext上下文=新的ClassPathXmlApplicationContext(“servicebeans.xml”);
Neo4jTemplate Neo4jTemplate=context.getBean(Neo4jTemplate.class);
DirectorRepository repository=context.getBean(DirectorRepository.class);
try(Transaction=neo4jTemplate.getGraphDatabase().beginTx()){
EndResult all=repository.findAll_Upd();//repository.findAll();
迭代器迭代器=all.Iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
transaction.success();
}
}
}
@交易的
公共接口DirectorRepository扩展了GraphRespository{
@查询(“匹配(n:主管)返回n”)
最终结果findAll_Upd();
}
@节点性
公共类人员实现可比性{
@格拉希德
长节;
//@index(unique=true)
字符串id;
@索引(indexType=indexType.FULLTEXT,indexName=“people”)
字符串名;
私生子短;
私人约会生日;
私人字符串出生地;
私弦传记;
私有整数版本;
上次修改的私人日期;
私有字符串profileImageUrl;
...
}
公共类主管扩展个人{
@Fetch@RelatedTo(elementClass=Movie.class,type=RelationshipConstants.DIRECTED)
private Set directedMovies=new HashSet();
}
公营制片扩展人{
@Fetch@RelatedTo(elementClass=Movie.class,type=RelationshipConstants.producted)
private Set producedMovies=new HashSet();
}
公共类参与者扩展个人{
@RelatedToVia(类型=RelationshipConstants.ACTED\u IN)
列出角色;
}
@节点性
公共类电影{
@格拉希德
长节;
@索引(唯一=真)
字符串id;
@索引(indexType=indexType.FULLTEXT,indexName=“搜索”)
字符串标题;
释放int;
字符串标语;
@Fetch@RelatedTo(type=RelationshipConstants.ACTED\u IN,direction=INCOMING)
设置),但我仍然得到相同的异常:

Director-Director=neo4jTemplate.projectTo(person,Director.class);

我不确定neo4j映射-但是您的java模型与您的业务描述不匹配-您更需要一个带有Set成员的Person类-其中MovieJob是您的抽象类,Actor、Director、Producer是子类。

您可以共享类的代码吗?您可以升级到SDN 3.0.1吗?以及完整的例外情况on?嗨,Michael,谢谢你的快速回复。我在描述中添加了代码和异常。我还升级到了SDN 3.0.1,但没有任何帮助。观察得很好,Dan。但是这个层次结构主要是从cineasts示例复制的,因为对我来说,它只是对neo4j和spring数据的测试,所以我对java模型没有太多的担心。