3
我已經把一個簡單的測試用例:Neo4j的:事務中刪除節點會導致異常
account = EmailAccount()
account.email = "[email protected]"
assert db.account_by_mail("[email protected]") == []
db.add_node(account)
assert db.account_by_mail(account.email) == [account]
db.delete_node(account))
assert db.account_by_mail("[email protected]") == []
一切順利,直到最後一行,在拋出一個異常:
Neo.DatabaseError.Statement.ExecutionFailure: Node 226 has been deleted
聲明由最後一行執行如下:
MATCH (account:Account) WHERE account.email = {mail} RETURN account, id(account), head(labels(account))
帶參數
{
'mail': "[email protected]"
}
所有的語句都是在同一個事務中執行的(我們使用py2neo Transaction類包裝在會話包裝器中)。該行爲與刪除語義(link here)並不完全一致,因爲該事務尚未提交,並且該語句是讀取而不是寫入。還有其他一些隱藏的限制嗎?這是默認行爲,如果是這樣,它是否可以改變(因爲我認爲大多數其他dbms不這樣做)?
從您的鏈接中:_有可能獲取對已刪除關係或尚未提交的節點的引用。因此,Neo4j找到對226的引用,但由於未提交,因此未找到該節點。 – Hrabal