我有两个名为Member和Content的节点,两者都以n:n的方式与关系HAS_RECOMMENDED
(成员 - [:HAS_RECOMMENDED] - >内容)相关。一个成员可以有多个推荐内容,多个成员可以推荐一个内容。
当我使用多个线程从java创建图形和关系时,我收到以下错误:
org.springframework.dao.ConcurrencyFailureException:执行错误 Cypher“Neo.TransientError.Transaction.DeadlockDetected”;码: Neo.TransientError.Transaction.DeadlockDetected;描述: LockClient [1604184]无法在资源RWLock上等待[NODE(63575), hash = 2083848996] since => LockClient [1604184]< - [:HELD_BY] - RWLock [NODE(63663),hash = 1735956338]< - [:WAITING_FOR] - LockClient [1604182]< - [:HELD_BY] - RWLock [NODE(63575), 散列= 2083848996];嵌套异常是 org.neo4j.ogm.exception.CypherException:执行Cypher时出错 “Neo.TransientError.Transaction.DeadlockDetected”;码: Neo.TransientError.Transaction.DeadlockDetected;描述: LockClient [1604184]无法在资源RWLock上等待[NODE(63575), hash = 2083848996] since => LockClient [1604184]< - [:HELD_BY] - RWLock [NODE(63663),hash = 1735956338]< - [:WAITING_FOR] - LockClient [1604182]< - [:HELD_BY] - RWLock [NODE(63575),hash = 2083848996]
答案 0 :(得分:3)
创建关系时,其端点节点将被写入锁定。如果多个线程尝试创建涉及同一组端点节点的关系,则可能会出现死锁,如您所遇到的那样。
如果你可以让每个线程在自己的一组端点节点上工作(不由任何其他线程共享),那么你应该能够避免这种死锁。