Skip to content

bug(种子):延迟引用更新失败可能导致关系不完整,但报告却显示成功 #2805

Description

@yinlianghui

问题

一次 Seed 加载可能在循环引用缺失的情况下结束,却仍然报告成功。

当最终的引用更新失败一次后,ObjectStack 不会进行第二次尝试。引用仍为 null,但结果依然显示 success: trueerrors: []totalErrored: 0

复现

测试数据

测试只插入以下两条记录。为了更直观地展示数据内容,可等价表示为两个 CSV:

audit_department

name,head_id
Engineering,Alice

audit_worker

name,department_id
Alice,Engineering

说明:以上 CSV 仅用于直观展示测试数据。实际复现仍通过 SeedLoaderServicerecords 数组加载,并不是从 CSV 文件执行导入。

这两条记录互相引用。Engineering 首先插入,此时 Alice 尚不存在,因此 Engineering.head_id → Alice 必须稍后补充。Alice 随后插入,此时 Engineering 已经存在,因此可以立即保存 Alice.department_id → Engineering

两条记录都存在后,ObjectStack 应使用 Alice 生成的员工 ID 更新 Engineering.head_id

复现步骤

  1. 使用默认配置,在全新的 SQLite 数据库中加载上述两条 Seed 记录。
  2. 在测试中拦截 engine.update,仅让第一次更新 audit_department.head_id 时抛出 Error("fetch failed"),后续调用正常执行。
  3. 加载结束后查询记录并检查 Loader 返回结果。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions