Neo4j和java:这个错误是什么" NULL不是一个键控集合"意思?

时间:2017-04-20 04:53:22

标签: java neo4j cypher

我试图删除一个关系,这个记录很少的错误出现了。

查询:

MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN r

整个错误输出:

Exception in thread "main" org.neo4j.driver.v1.exceptions.value.NotMultiValued: NULL is not a keyed collection
at org.neo4j.driver.internal.value.ValueAdapter.get(ValueAdapter.java:192)
at basicANeo4j.Importer.<init>(Importer.java:213)
at basicANeo4j.Importer.main(Importer.java:246)

当我检查相应的关系时,没有属性为null:

<id>:595 value_bitcoin:20000000000outputIndex:defaultuniqueReferenceTran:bcaeee45968b5a08c88ed7a0d90a1275728eda356013465408197e9f77c634daNULLtranHashString:bcaeee45968b5a08c88ed7a0d90a1275728eda356013465408197e9f77c634datime:2016-01-01T22:55:26type:pubkeyhashvalue_dollar:86554.0estChanAddr:3KgtbGgaX2ngstNpvyv7LwpHSweVeqGbpM

我查看了ValueAdapter.class,这是相关的代码:

@Override
public Value get( String key )
{
    throw new NotMultiValued( type().name() + " is not a keyed collection" );
}

没有任何文档,它根本没用。

3 个答案:

答案 0 :(得分:2)

正如Tomaz所说,这是因为您无法返回刚刚删除的节点或关系。

但是,您可以获取节点或关系的地图“快照”,删除节点或关系,然后返回快照。

以下是知识库中的article

答案 1 :(得分:1)

我认为这是因为你试图返回一个null对象,因为你先删除它。我会尝试这个

MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN 'success'

您可以返回一个字符串,如果您对哪个钱包删除了关系感兴趣或者您无法返回任何内容,则可以返回n。

答案 2 :(得分:0)

我刚刚意识到密钥集合的错误来自于:在迭代记录时,我尝试打印关系的属性,而该属性不存在于此关系中。 (我从代码的另一部分复制它而不检查它,并确信这是问题的查询。所以我错过了。)