请查看以下代码,该代码将属性添加到任意大图中的每个节点。迭代器是在事务中创建的。在迭代事务的过程中,它创建完成并创建一个新的(以限制用于正在进行的写入的内存)。从那时起,我们继续从该迭代器中提取节点,但是从不同的事务中提取节点。这个可以吗?这些方法设计为在调用后没有事务的情况下工作吗?
JavaDoc包含一个神秘的警告:请注意在事务内部尽快正确关闭返回的ResourceIterable
,以避免可能阻止写入操作。显然{在我们完成迭代之前,{1}}无法关闭,那么这个警告试图传达的是什么?
ResourceIterable
答案 0 :(得分:1)
警告消息试图说明如果您采取这样的锁定,DB中的其他内容可能无法同时修改数据库。既然你在全球范围内这样做,这对你来说可能会有问题。
幸运的是,看起来你正在尝试做的事情可以更简单地使用单个cypher命令完成,然后使用java和这个方法。查询将是:
MATCH n SET n.property="update";
您可以consult the docs了解如何从java运行该cypher查询。
另外,我认为一般GlobalGraphOperations
可能会被弃用,因此您可能希望检查其他方法来改变整个图形(就像我在这里提供的那样)而不是使用那个java类。
答案 1 :(得分:1)
You shouldn't pull the nodes from the same iterator instance, but you can continue to pull them from a different one, you will see some nodes with updates and some without depending on how far your update has gone through.
Don't use an iterator from another tx somewhere else.