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中的事務是線程綁定的。您不能在同一個線程中啓動多個事務。