Neo4j不支持嵌套。他们是平坦的。
因此,数据库指出事务嵌套不受支持。但是,作为开发者我们可以在事务内部创建另一个事务。
try (Transaction parentTx = db.beginTx()) {
try (Transaction childTx = db.beginTx()) {
}
}
有当TopLevelTransaction
和PlaceboTransaction
进场。
当另一个事务在同一个线程中启动时,而不是创建新的TopLevelTransaction
,数据库将现有事务包装为PlaceboTransaction
。
PlaceboTransaction
将所有方法委托给底层交易。因此,当您拨打success()
或failure()
时,它将被授权到根目录TopLevelTransaction
。
该规则的一个例外是close()
方法。当你关闭PlaceboTransaction
它实际上什么都不做。以这种方式,您可以安全地close()
所有“子女”交易和父母交易将仍然活跃。
注:
- 使用
try-with-resource
语法。它在Java7中可用。使用此语法是使用Neo4j事务并确保它们已关闭的安全方法。
- 总是关闭以前的交易。
- Neo4j中的事务是线程绑定的。您不能在同一个线程中启动多个事务。