3
我剛開始閱讀關於ORMLite的內容,因爲我有興趣在Android應用程序中使用它。使用ORMLite更新對象及其關係
我想感受一下這個框架應該如何保持對象關係。
舉例來說,如果我有這些類:
@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);
是這個推薦的方式來更新關係已更改的對象? (特別是與一組持久對象的關係,如上面的代碼所示)。 不知怎的,我有一個印象,它應該是一個更好的方式來做到這一點。另外,如果我想使用這個框架,我想在模型類中放入域屬性和持久性相關屬性(例如,外鍵和主鍵?)。想知道是否有辦法避免這種混亂的擔憂。
感謝您的任何幫助。
感謝您的回答@Gray。所以區別在於Bill的Dao類的更新方法會爲BillItem調用Dao類,以在所有billItems之間進行迭代並更新每個billItem。那麼目前沒有辦法使這個自動化?手動操作似乎並不好玩。此外,似乎我將不得不手動檢查以前的billItems是否不再在新的billItems列表中,如果是這種情況,請手動從數據庫中刪除它們。遺憾的是,如果所有這些都不能自動化:( – Sergio 2012-03-29 15:28:45
@Sergio如果你使用'ForeignCollection',那麼如果你調用'billItems.remove(bill)'它將通過DAO從集合_and_數據庫中刪除。也可以調用'billItems.update(bill)'在更改它時更新它 – Gray 2012-03-29 15:32:20
@Sergio問題是它現在是代理對象的集合ORALite不知道何時更改了'billItems中的條目'收集,除非你告訴它,你做到了。 – Gray 2012-03-29 15:33:09