ObjectBox 1:n 关联关系创建更新及原有关联保留问题咨询
结论
你当前贴出的代码无法实现「给已有客户新增订单」的需求,还会出现关联丢失的问题,核心原因是你没有从数据库读取已有客户的实例,直接创建了空的Customer对象操作。
- 直接运行你给出的代码:你创建的是全新的Customer实例,没有绑定已有客户的ID,执行
put时会作为新客户插入数据库,仅关联你新增的#3、#4订单,和原有的客户数据完全独立,原有客户和#1、#2的关联不会受影响,但完全没达到你给已有客户加订单的预期。 - 如果你给这个新建的Customer手动赋值了已有客户的ID再执行
put:ObjectBox会按你当前传入的orders列表全量覆盖该客户的关联关系,原有#1、#2和该客户的关联会直接丢失。
正确写法
要保留原有订单关联,必须先从数据库查询到对应客户的实例,此时实例的orders列表已经加载了历史关联的#1、#2,在这个基础上追加新订单再存储即可:
// existingCustomerId 为你要更新的已有客户的ID Customer customer = store.box<Customer>().get(existingCustomerId)!; // 追加新订单 customer.orders.add(Order()); // Order #3 customer.orders.add(Order()); // Order #4 // 提交更新 store.box<Customer>().put(customer);
这种操作下ObjectBox会增量更新关联关系,原有#1、#2的关联会完整保留,同时新增#3、#4和该客户的绑定。
内容的提问来源于stack exchange,提问作者w461
相关产品推荐
相关产品推荐

