Сохранить список отношений «один ко многим» Используя ObjectBox? - PullRequest
0 голосов
/ 11 февраля 2020

Я получаю json, как показано ниже с сервера:

  { "customers": [
    {
        "customer_name": "name1",
        "orders_list": [
            {
                "order_id": "1111111",
                "order_type": "a",
                "order_date": "11/02/2020 "
            },
            {
                "order_id": "1111112",
                "order_type": "b",
                "order_date": "11/02/2020 "
            },
            {
                "order_id": "1111113",
                "order_type": "c",
                "order_date": "11/02/2020 "
            }
        ]
    },
    //more customers
]

}

Я получаю его с помощью Retrofit и хочу сохранить его в Objectbox.

Клиент entity:

  @Entity
public class Customer {

    @Id long id;

    @SerializedName("customer_name")
    private String  customer_name;

    @SerializedName("array_of_matchs")
    @Transient
    public List<Order> orders_list;

    @Backlink
    public ToMany<Order> orders;

   //constructor , getters , setters ,...
}

Order Entity:

publi c class Order {

    @Id
    public long id;

    @SerializedName("order_id")
    private int  order_id;

    @SerializedName("order_type")
    private String  order_type;

    @SerializedName("order_date")
    private String  order_date;

    public ToOne<Customer> customer;
  //constructor , getters , setters ,...
}

Gson преобразователь возвращает List из Customer s со всеми его заказы. Я пытался хранить клиентов, как показано ниже:

  customersBox.put(list_of_customers_get_from_retrofit);

И заказы:

for (Customer each_customer : list_of_customers_get_from_retrofit ) {
      orderBox.put(each_customer.orders_list);
}

Затем, когда я установил флажки с Браузер данных , все customerToOneRelationId установлено на 0. Что с этим не так?

В таком случае, как мы можем установить связь между customer и его Order s списком? Как правильно хранить заказы?

1 Ответ

0 голосов
/ 11 февраля 2020

Я должен установить цели вручную:

 for (Customer each_customer : list_of_customers_get_from_retrofit ) {
     for (Order each_order : each_customer.orders_list ) {
       each_order.customer.setTarget(each_customer);
       orderBox.put(each_order);
     }
}

Благодаря этому хранилищу (Это полезно для любого Objectbox newb ie, как я).

...