【问题标题】:creating and updating an ObjectBox 1:n relationship创建和更新 ObjectBox 1:n 关系
【发布时间】:2021-09-08 15:56:18
【问题描述】:

我对@9​​87654321@ 有点困惑。让我们继续处理客户订单关系,其中一个客户可以有 n 个订单。

如果我为现有客户创建新订单并将其存储在

Customer customer = Customer();
customer.orders.add(Order()); // Order #3
customer.orders.add(Order()); // Order #4
// Puts customer and orders:
final customerId = store.box<Customer>().put(customer);

我希望这会更新客户(覆盖所有数据),因为我使用的是客户的 ID。我猜,新订单#3 和#4 被创建为新订单并链接到客户,因为它们的订单ID 为0。但是我之前存储的订单(#1 和#2)会发生什么?他们是否与我的客户保持联系?或者这个链接是否也被覆盖并因此丢失?

【问题讨论】:

    标签: objectbox flutter-objectbox


    【解决方案1】:

    按原样,您的代码示例将创建一个新客户。要更新现有客户及其关系,首先从商店获取现有客户(或重新使用之前放置的客户实例)。

    Customer customer = store.box<Customer>().get(customerId);
    customer.orders.add(Order()); // Order #3
    customer.orders.add(Order()); // Order #4
    store.box<Customer>().put(customer);
    

    documentation 还展示了如何从 ToMany 关系中获取和删除对象。

    【讨论】:

    • Customer customer = Customer(); 是复制粘贴错误。当然,客户需要来自带有 id 的 ObjectBox。但问题是否仅使用客户和订单 3 和 4 更新是否会保持与订单 1 和 2 的关系。无论如何,由于 ObjectBox 中的关系不能很好地支持我的分层架构(通过转换嵌套数据类型),我同时将嵌套数据存储为 json 字符串而不是关系
    • 当您从数据库中获取Customer 时,ToMany 包含现有的相关对象。如果您删除它们并仅添加订单 3 和 4,则在放置 Customer 时与订单 1 和 2 的关系将被解除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多