使用 Room/LiveData 获取并观察三个对象

Get and observe three objects with Room/LiveData

我有以下数据库关系:

换句话说:一个Order有0-n个Books,一个Order分配给一个Customer

就我而言,我有 bookId我想在我获得所有相关项目(书籍、订单和客户)并且当我确信它们都存在时启动一些功能 - 我只需要启动它一次。我试图通过以下方式解决它:

视图模型:

private LiveData<Book> book;
private LiveData<Order> order;
private LiveData<Customer> customer;

public MyViewModel(Application app) {
    ...
    book = bookRepository.getBookLiveData(id);
    order = Transformations.switchMap(book, b -> orderRepository.getOrder(b.getIdOrder()));
    customer = Transformations.switchMap(order, o -> customerRepository.getCustomer(o.getIdCustomer()));
}

然而,这个解决方案是无效的,我相信这可以用 Room/LiveData 以更优雅的方式完成。

我还尝试了另一种方法 - 创建以下对象 BookOrderCustomer:

public class BookOrderCustomer {

    @Embedded
    public Book book;

    @Embedded
    public Order order;

    @Embedded
    public Customer customer;

}

但这并没有像预期的那样工作,Dao的查询总是返回 null。

知道如何解决这个问题吗?谢谢。

MediatorLiveData,它可以观察你所有的流并合并数据。我认为这是最好的方法。