当您使用REST批处理操作端点提交多个查询时,该过程是事务性的。来自文件:
此服务是事务性的。如果执行的任何操作失败(返回非2xx HTTP状态代码(,事务将被回滚,所有更改都将被撤消。
我想提交多个查询,如果第一个查询失败,则回滚整个事务。这方面的一个例子可能如下:
- 对用户进行身份验证
- 更新用户公共配置文件
如果authenticate用户查询未能找到经过身份验证的用户,我希望该密码查询能让Neo4j返回一个非2xx代码,这样第二个查询就不会运行。因为第一个查询是有效的查询,所以它不会让Neo4j返回非2xx代码,而是会返回null,因为它找不到经过身份验证的用户。
有办法做到这一点吗?
可能的解决方法(因此其中一个不会被添加为答案(:
- 将这两个查询结合在一起,其缺点是增加了复杂性和代码重复
- 使用事务性方法,这样做的缺点是额外的http请求
使用事务Cypher端点。
在那里,如果找不到用户DELETE tx URL /db/data/transaction/<txid>
,首先将您的身份验证查询发布到/db/data/transaction
。否则,将更新查询POST到/db/data/transaction/<txid>/commit
。