java.lang.IllegalStateException:使用导入的数据时,Spring Data Neo4j中不存在主SDN标签

时间:2014-05-09 22:51:24

标签: java neo4j spring-data-neo4j

尝试使用Neo4j CSV Batch Importer导入SDN中的节点,提供java.lang.IllegalStateException:

java.lang.IllegalStateException: No primary SDN label exists .. (i.e one with starting  with _)

这是在通过密码查询添加新标签之后:

match (n:Movie) set n:_Movie;

检查通过SDN创建的节点显示它们具有相同的标签。运行时的结果

match (n) where id(n)={nodeId} return labels(n) as labels;
LabelBasedStrategyCypher.java中找到的

对于两者都是相同的:

["Movie","_Movie"]

通过SDN保存和检索节点没有任何问题。我必须遗漏一些东西,因为我觉得设置appropiate labels应该足够了。

我在使用Oracle Java 1.8.0_05的arch linux x64上运行SDN 3.0.2.RELEASE和neo4j 2.0.3

编辑:我的CSV文件如下所示。 appId仅用于确保节点与我们之前存储的节点相同,如the internal nodeId is Garbage collected,并且新节点可以在删除旧节点后获取旧节点ID。 nodeId用于实际查找和连接关系等。

appId:int   l:label title:string:movies year:int
1   Movie   Dinosaur Planet 2003
2   Movie   Isle of Man TT 2004 Review  2004

EDIT2:

我做了更多测试,检查LabelBasedNodeTypeRepresentationStrategy的来源,看看出了什么问题。运行抛出Exception的readAliasFrom()方法不会返回任何错误:

String query = "start n=node({id}) return n";
Node node = null;
for(Node n : neo4jTemplate.query(query,params).to(Node.class)){
    node = n;
}

// when running the readAliasFrom method manually the label is returned correctly
LabelBasedNodeTypeRepresentationStrategy strategy = new 
        LabelBasedNodeTypeRepresentationStrategy(neo4jTemplate.getGraphDatabase());
System.out.println("strategy returns:  " +(String)strategy.readAliasFrom(node));

// trying to convert the node to a movie object, however throws the Illegal State Exception
Movie movie = null;
movie = neo4jTemplate.convert(node,Movie.class);

因此,_Movie标签存在,手动运行readAliasFrom()方法不会抛出异常,但尝试将节点转换为Movie。从SDN创建的节点没有这些问题,即使它们看起来与我相同。

0 个答案:

没有答案