Обновление объектов и их отношений с помощью ORMLite - PullRequest
3 голосов
/ 22 марта 2012

Я только начал читать об ORMLite, так как мне интересно использовать его в приложении для Android.

Мне бы хотелось иметь представление о том, как / должны сохраняться объектные отношения в этой среде.

Например, если у меня есть эти классы:

@DatabaseTable(tableName = "bill_items")
class BillItem{...}

@DatabaseTable(tableName = "bills")
class Bill {
  @DatabaseField String x;

  List<BillItem> billItems = new ArrayList<BillItem>;

  public void setItems(List<BillItem> billItems) {
    this.billItems = billItems;
  }
}

Насколько я понимаю, рекомендуемый способ обновления объекта Bill будет выглядеть примерно так:

Dao<Bill, String> billDao = DaoManager.createDao(connectionSource, Bill.class);
Bill bill = billDao.queryForId(...);

List<BillItem> billItems = ...; //some new list of items
bill.setX("some new value for X");
bill.setItems(billItems);

//saving explicitly the billItems before saving the bill. Is this correct ?
Dao<BillItem, String> billItemDao = DaoManager.createDao(connectionSource, BillItem.class);
for(BillItem billItem : billItems)
  billItemDao.update(billItem);

billDao.update(bill);

Это рекомендуемый способ обновления объекта, отношения которого изменились?(в частности, отношения с набором постоянных объектов, как в коде выше).Каким-то образом у меня сложилось впечатление, что это должен быть лучший способ сделать это.

Кроме того, если я хочу использовать эту платформу, я должен добавить в классы моей модели как атрибуты домена, так и атрибуты, связанные с постоянством (например,, внешние и первичные ключи?).Хотите знать, есть ли способ избежать этого смешивания проблем.

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 25 марта 2012

Ваш код в основном правильный, хотя есть некоторые вещи, которые вы можете сделать, чтобы улучшить его.

  1. Вы должны использовать аннотацию @ForeignCollectionField, чтобы отметить поле billItems. Это загрузит коллекцию, когда вы запросите Bill. См. Документы на иностранных коллекций .

    @ForeignCollectionField
    ForeignCollection<BillItem> billItems;
    
  2. Вместо того чтобы каждый раз обновлять вручную, вы можете создать свой собственный класс Dao для Bill, который переопределяет метод update() обновления и самостоятельно обновляет внутренние объекты.

...