Spring Data Neo4j -找不到NodeImpl#0的'__type__'属性

jmp7cifd  于 2022-11-05  发布在  Spring
关注(0)|答案(3)|浏览(143)

我正在尝试在java应用程序中使用spring数据来玩neo4j。现在我遇到了一个奇怪的问题。下面是场景。

I have:
1. Two UserNode, say A and B, where "UserNode" is java @NodeEntity class. 
2. A @RelationshipEntity "RequestedTo" which is again a java class. 
3. A relationship "A RequestedTo B" which is directed towards B.

现在,当我尝试获取所有具有指向B的RequestedTo关系的UserNode时,会出现以下异常

Caused by: org.neo4j.graphdb.NotFoundException: '__type__' property not found for NodeImpl#0.
    at org.neo4j.kernel.impl.core.Primitive.newPropertyNotFoundException(Primitive.java:184)
    at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:179)
    at org.neo4j.kernel.impl.core.NodeImpl.getProperty(NodeImpl.java:52)
    at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:155)
    at org.springframework.data.neo4j.support.typerepresentation.AbstractIndexingTypeRepresentationStrategy.readAliasFrom(AbstractIndexingTypeRepresentationStrategy.java:106)

在这里,我使用Spring中提供的GraphRepository接口对neo4j进行以下查询。

START user=node:searchByMemberID(memberID={0}) , member=node(*), root = node(0) MATCH user<-[r:RequestedTo]-member WHERE member <> root RETURN member

同样,当我在neoclipse中启动这个查询时,我可以看到结果中UserNode上没有“type”属性。但是当我在neo4j浏览器控制台中尝试这个查询时,我可以看到结果集中出现了“type”属性。

laik7k3q

laik7k3q1#

我刚刚玩了一点Neo4j,但请尝试以下操作:

START user=node:searchByMemberID(memberID={0}) , member=node(*)
MATCH user<-[r:RequestedTo]-member 
WHERE id(member) <> 0 
RETURN member
o7jaxewo

o7jaxewo2#

你不需要在start中指定member,cypher会自己处理这个问题。毕竟,从一个或几个起点进行的所有本地查询就是图数据库的作用:

START user=node:searchByMemberID(memberID={0})
MATCH user<-[r:RequestedTo]-member 
RETURN member
zdwk9cvp

zdwk9cvp3#

我与OP出现了相同的错误:

'__type__' property not found for NodeImpl#0

并通过使用has关键字检查__type__属性是否存在来解决该问题。
更明确地说,这个要求会引发错误:

@Query(value = "start n=node(*) where not (n)-[:hasParent]->() return n")
Set<MyNodeType> findRootNodes();

但这个请求是有效的:

@Query(value = "start n=node(*) where has(n.__type__) and not (n)-[:hasParent]->() return n")
Set<MyNodeType> findRootNodes();

希望这能对某人有所帮助。

相关问题