我在java中使用neo4j 2.1.7。
try(Transaction transaction = this.graphDatabaseService.beginTx())
{
Node user = this.graphDatabaseService.createNode();
user.setProperty("userId", userId);
transaction.failure();
}因此,我将获得GraphDatabaseService的对象,并创建一个新事务并将其标记为回滚。根据它们的javadocs:
空洞失效() 将此事务标记为失败,这意味着在调用close()时它将无条件回滚。一旦调用了此方法,事后调用success()并不重要--事务仍将回滚。
但是我看到,无论什么情况,节点都会被创建。我试过throwing an exception。我也尝试过not calling transaction.success()。不过,我仍然看到这些更改被提交,而不是回滚。我不确定这种行为,我想要一个解释。谢谢。
如果您必须知道,我正在尝试使用嵌套事务构建commit()函数,以便如果任何操作在内部事务中失败,父事务也必须失败。然而,在这个过程中,我发现无论我做什么,事务都是被提交的。
更新1:
嵌入式版本的neo4j运行良好。其余的版本正在引起这个麻烦。我用这个包休息:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-rest-graphdb</artifactId>
<version>2.0.1</version>
</dependency>发布于 2015-03-28 18:16:31
没有事务超过REST,至少对于旧版本是这样的。
只有HTTP上的事务具有新的Cypher端点。
这个库已经停止,我建议您使用例如JDBC驱动程序或Spring数据REST附带的新实现。
https://stackoverflow.com/questions/29319464
复制相似问题