【发布时间】:2018-12-05 23:19:16
【问题描述】:
根本问题:我想在 [Entity B] 的外键中设置 [Entity A] 的 id,但 [Entity A] 的 id 在插入数据库之前不可用(因为它是由DBMS)。
使用架构组件(Room、ViewModel 和 LiveData),我如何执行在数据库中保存多个相关实体的事务?以下代码当前驻留在 ViewModel 中并且工作正常。问题是我想把这个AsyncTask 像其他简单的单操作查询一样放在存储库层,但是可以吗?因为在这种情况下,存储库将负责管理关系并了解实体详细信息。
正如我上面所说,主要问题是我需要插入实体的 id,以便我可以将其保存在另一个实体中。如果不存在此要求,我将能够将每个实体一个一个地保存在存储库中单独的 AsyncTasks 中。
MainViewModel.java:
public void buy(Item item, Store store) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
long storeId = mRepository.insertStore(store);
Purchase purchase = new Purchase(storeId); // here uses id of the store
long purchaseId = mRepository.insertPurchase(purchase);
item.setPurchaseId(purchaseId); // here uses id of the purchase
mRepository.updateItem(item);
return null;
}
}.execute();
}
【问题讨论】:
标签: java android android-asynctask android-room android-viewmodel