Node(nodeOffset: 0) has more than one neighbour in table HAS in the bwd directio...
🚨 错误信息
Statement[83]: MATCH (a:Person {face_id: '2'}), (b:Preference {name: '饮食偏好'}) CREATE (a)-[:HAS]->(b);
Failed: Runtime exception: Node(nodeOffset: 0) has more than one neighbour in table HAS in the bwd direction, which violates the rel multiplicity constraint.
🤖 AI解决方案
Statement[83]: MATCH (a:Person {face_id: '2'}), (b:Preference {name: '饮食偏好'}) CREATE (a)-[:HAS]->(b);
Failed: Runtime exception: Node(nodeOffset: 0) has more than one neighbour in table HAS in the bwd direction, which violates the rel multiplicity constraint.
翻译:
Statement[83]: 匹配 (a:Person {face_id: '2'}), (b:Preference {name: '饮食偏好'}) 创建 (a)-[:HAS]->(b);
失败:运行时异常:节点(nodeOffset: 0)在 HAS 表的后向方向(bwd direction)有多个邻居,这违反了关系多重性约束。
原因分析
创建的 :HAS 关系违反了其定义的多重性约束,即一个 Person 节点在 :HAS 关系(后向)最多只能有一个 Preference 节点。当前操作尝试为已经存在 :HAS 关系的 Person 节点添加另一个 :HAS 关系。
解决方案
在创建新的 :HAS 关系之前,检查目标 Person 节点是否已经存在此类型的关系。如果存在,则不执行创建操作,或根据业务逻辑决定是否更新现有关系。
示例代码 (Cypher):
MATCH (a:Person {face_id: '2'}), (b:Preference {name: '饮食偏好'})
WHERE NOT EXISTS((a)-[:HAS]->(b))
CREATE (a)-[:HAS]->(b);
或者,如果允许更新关系属性,可以先匹配现有关系并进行更新,但这取决于你的具体业务需求。
预防措施
- 明确关系定义:在设计数据库时,为关系明确定义多重性约束,并据此进行开发。
- 幂等性操作:对于可能重复执行的创建操作,应设计成幂等的,即重复执行多次与执行一次效果相同,避免因重复操作导致约束违反。