Dart使用Objectbox时ToMany<E>关联更新抛出404错误如何解决
问题原因及解决方案
根因分析
- 双向关联重复操作冲突:你定义的
Edge.relNodes带有@Backlink()注解,属于反向关联字段,完全由ObjectBox通过正向关联Node.relEdges自动维护,不能手动修改。你目前的代码同时修改了正向的Node.relEdges和反向的Edge.relNodes,导致ObjectBox处理关联变更时,重复执行同一个关联的删除/新增操作,底层找不到对应关联条目就抛出404错误。 - 旧版本bug:你使用的objectbox 1.0.0是早期正式版本,存在ToMany关联操作状态同步的已知bug,清空后重新添加关联时如果存在未同步的脏数据,会触发native层校验失败。
修复方案
- 删掉所有修改反向关联的代码:删除edgeDao.dart中操作
relNodes的逻辑,所有关联变更只操作正向的Node.relEdges字段即可,反向关联会在正向实体put后自动同步。 - 调整更新逻辑:修改完节点的关联列表后,仅需put修改过的Node实体即可,不需要重复put对应的Edge实体,避免重复提交关联变更触发冲突。
- 旧版本兼容操作:如果暂时不升级依赖,修改ToMany前先同步状态到数据库,示例代码:
// nodeDao.dart更新逻辑调整 element.relEdges.applyToDb(); element.relEdges.clear(); element.relEdges.addAll(edges); _box.put(element);
- 升级依赖版本:将objectbox依赖升级到1.4.0及以上稳定版,该版本已修复你遇到的ToMany操作404原生错误问题。
内容的提问来源于stack exchange,提问作者Luka Badzaghua
相关产品推荐
相关产品推荐

