我正在使用neo4j 2.1.7和java。
try(Transaction transaction = this.graphDatabaseService.beginTx())
{
Node user = this.graphDatabaseService.createNode();
user.setProperty("userId", userId);
transaction.failure();
}
所以我得到GraphDatabaseService的对象并创建一个新事务并将其标记为回滚。根据他们的javadocs:
void failure()
将此交易标记为失败,这意味着它将会失败 无条件地在调用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>
答案 0 :(得分:1)
没有REST上的交易,至少不适用于那个旧版本。
只有HTTP通过新的Cypher端点进行交易。
该库已停产,我建议您使用例如JDBC驱动程序或Spring Data REST附带的新实现。