使用ORMLite更新对象及其关系

时间:2012-03-22 01:09:01

标签: java android ormlite

我刚刚开始阅读有关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 个答案:

答案 0 :(得分:3)

您的代码基本上是正确的,尽管您可以采取一些措施来改进它。

  1. 您应该使用@ForeignCollectionField注释来标记billItems字段。这将在您查询Bill时加载集合。请参阅foreign collections上的文档。

    @ForeignCollectionField
    ForeignCollection<BillItem> billItems;
    
  2. 您可以为Bill创建自己的Dao类,而不是每次手动更新,它会覆盖更新update()方法并自行更新内部对象。